사용자가 컴퓨터에서 소프트웨어인 응용프로그램을 실행하기 위해선 하드웨어를 어떻게 이용할 지가 문제가 된다. 하드웨어와 응용 프로그램 사이에서 하드웨어를 이용하기 위한 소프트웨어를 우리는 '운영체제'라고 한다. '운영체제' 속에서 컴퓨터 자원을 관리하는 게 바로 커널이다. 커널의 경우 컴퓨터 자원만 바라보고 있기 때문에 사용자와의 상호작용은 전혀 지원하지 않습니다. 그렇다면 어떻게 사용자와 상호작용하는가? 그떄 바로 이 Shell 이 그 기능을 한다.

 

Shell

사용자의 입력을 받아 적절한 프로그램을 수행시켜준다.

 

Shell 의 기능

1. 사용자와 커널 사이에서 명령을 해석해 전달하는 명령어 해석기 기능이 있다. 

2. 쉘은 자체 내에 프로그래밍 기능이 있어 프로그램을 작성할 수 있다( 쉘 프로그램을 셀 스크립트라고 부른다.)

3. 사용자 환경 설정의 기능이 있어 사용자의 환경을 설정할 수 있다.

 

Shell 의 종류

1. Bourne Shell(sh)

1974년 스티브 본이 개발하였고, 최초의 쉘이다. 대부분의 리눅스에 기본적으로 설치가 되어있다. 설치 위치는 /bin/sh 이다.

2. C Shell(csh)

1978년 빌 조이가 개발하였다.  Bourne Shell 의 사용성을 높이고, 더욱 강력하게 만들어졌다. C언어를 기반으로 만든 Shell 이다. 때문에 강력한 프로그램 작성 기능을 지니었다. 설치 위치는 /bin/csh 이다

3. tee-see Shell(tcsh)

카네기 멜런 대학교의 학생들이 개발하여 1983년 소스코드를 게시하였다.  C Shell 에서 명령 행 완성과 명령 행 편집 기능을 추가한 것이다. 설치위치는 /bin/tcsh 이다.

4. Z Shell(zsh)

폴 폴스타드가 1990년 대학교 재학중일 때 첫 버전을 작성하였다. 지금까지의 수 많은 쉘의 기능을 머금고 있다. 확장형 Bourne Shell 이다. 설치 위치는 /bin/zsh 이다.

5. Bourne-again shell(bash)

Bourne-again shell 은 지금 현 시대에 가장 많이 쓰이는 Shell 이다. 줄여서 Bash Shell 은 GNU 프로젝트를 위해 브라이언 폭스가 작성한 쉘이다.GNU 운영체제와 리눅스, 맥 OS 등 기본 쉘로 채택되어있다. 대부분 쉘스크립트라고 검색을 하면 기준이 Bash SHell 로 작성되어있다. 설치 위치는 /bin/bash 이다.

 

 

 

 

자신의 컴퓨터에 설치되어 있는 쉘을 확인하는 명령어는

  • cat /etc/shells 

이다.

 

사용자의 쉘을 다음 명령으로 바꿀 수 있다.

  • chsh -s [쉘이름] [사용자이름]
728x90

 

 

DeadLock

둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황

- DeadLock 의 발생조건 

1. 상호 배제

  • 한 번에 프로세스 하나만 해당 자원을 사용할 수 있다. 사용 중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야 한다.
  • 2.점유 대기
    • 자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 
  • 3. 비선점
    • 이미 할당된 자원을 강제로 빼앗을 수 없다(비선점).
  • 4. 순환 대기
    • 대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 한다.

 

데드락 접근법

1. 탐지 기능

  • 단순히 프로세스를 1개 이상 중단시키기
    • 교착 상태에 빠진 모든 프로세스를 중단시키는 방법 : 계속 연산중이던 프로세스들도 모두 일시에 중단되어 부분 결과가 폐기될 수 있는 부작용이 발생할 수 있음
    • 프로세스를 하나씩 중단 시킬 때마다 탐지 알고리즘으로 데드락을 탐지하면서 회복시키는 방법 : 매번 탐지 알고리즘을 호출 및 수행해야 하므로 부담이 되는 작업일 수 있음
  • 자원 선점하기
    • 프로세스에 할당된 자원을 선점해서, 교착 상태를 해결할 때까지 그 자원을 다른 프로세스에 할당해 주는 방법

2. 회복 기능

  • Allocation, Request, Available 등으로 시스템에 데드락이 발생했는지 여부를 탐색합니다. 즉, 은행원 알고리즘에서 했던 방식과 유사하게 현재 시스템의 자원 할당 상태를 가지고 파악합니다.
  • 이 외에도 자원 할당 그래프를 통해 탐지하는 방법도 있습니다.

 

 

Semaphores

728x90

멀티프로그래밍 : 하나의 단일프로세서 시스템안에서 여러개의 프로세스들을 관리하는 것

멀티프로세싱 : 하나의 멀티프로세서 안에서 여러개의 프로세스들을 관리하는 것

분산 처리 시스템(Distributed Processing System): 약결합 시스템으로, 독립적인 처리 능력을 가진 컴퓨터 시스템을 통신망으로 연결한 시스템이다. 서로 다른 장소에 위치한 컴퓨터 시스템에 기능과 자원을 분산시켜 상호 협력할 수 있는 시스템

 

 

OS 디자인에 있어서 가장 중요한 것은 동시성(Concurrency)이다.

 

 

 

Race Condition 

여러개의 프로세스 혹은 쓰레드가 data를 읽거나 쓰는데 마지막 결과값이 여러개의 프로세스 내에서 명령 수행 순서에 달려있을 때 발생한다.

 

(*Process 상호작용 분류)

1. 프로세스들이 서로를 잘 모름 -> 자원 경쟁 발생 가능성

2. 프로세스들 간접적으로 서로를 알고 있다. -> 대부분의 오브젝트에서 협력

3. 프로세스들 서로를 직접적으로 안다. -> 협력

 

 

concurrent process 는 같은 자원의 사용땜에 경쟁할 때 갈등이 발생한다. 갈등 시 마주치는 3가지 문제는

1. mutual exclusion : critical section 에는 한번에 오직 하나의 프로그램만 허락된다. 여러개가 동시에 접근하려하면 문제 생김

2. deadlock :  상호배제가 야기한 추가적 문제점.

3. starvation

 

728x90

* 준비상태(Ready)에서 실행상태(Running)로 상태전이(State Transition)된다고 한다. 이 과정을 디스패칭(dispatching)이라고 하고 디스패처(dispatcher)가 이 일을 수행한다.

 

- 디스패칭의 단위는 thread 또는 lightweight 프로세스로 불린다.

- 자원 소유 단위는 프로세스 혹은 태스크이다.

 

Multithreading - 하나의 프로세스에서 여러개의 동시 실행 흐름을 지원하는 OS 의 능력

 

 

User-Level Threads

  •  커널은 쓰레드의 존재를 알지 못한다. 프로세스 내의 Thread library 가 쓰레드에 관한 관리를 모두 담당한다. 쓰레드의 관리에 있어서 커널이 아예 관여하지 않기 때문에 모드 스위칭이 적게 일어나 굉장히 가볍게 쓰레딩을 할 수 있다. 하지만 이 경우, 하나의 쓰레드만 작동을 멈춰도 그 프로세스 자체가 block 되며, 멀티 프로세서를 전혀 활용하지 못한다는 점이서 별로 이점이 없는 방식이다.

Kernel-Level Threads

  • 커널이 모든 프로세스와 모든 쓰레드의 관리를 하는 방식이다. 모든 프로세스와 쓰레드들은 커널에 의해 독자적으로 스케줄링 된다., User-Level 일때와 다르게 Thread table 이 커널 합쳐져서 한 개만 존재하는 것을 볼 수 있다.

 

 

728x90

프로세스란?

 = > Background

 

 

PCB

Process Control Blocks

- process element 를 포함한다.

- OS 에 의해 만들어지고 관리된다.

- 멀티프로세스를 지원하는 핵심 툴이다.

 

(* CPU 가 n개면 running process 도 n개)

 

(* dispatch : 다중 프로그래밍 시스템에서 다음에 처리될 작업을 선택하여 실행시키는
것. 즉, 대기 열에서 기다리고 있는 프로세스를 선택하여 중앙 처리 장치
의 사용 권한을 부여하는 작업.)

 

PCB 의 역할 &  어떤 정보가 저장되는 지 : PCB 는 프로세스의 중요한 정보와 메모리 주소를 저장하여, 프로세스 상태 관리 및 문맥 전환에 사용된다. PID, 프로세스 상태, 프로세스 우선순위 등 프로세스 elements 들이 저장되어 있다.

 

Process states

 

Running : CPU를 잡고 인스트럭션(instruction)을 수행중인 상태

Ready : CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하는 상태)

Blocked (wait, sleep) :

 - CPU를 주어도 당장 instruction을 수행할 수 없는 상태

 - process 자신이 요청한 event(ex: I/O)가 즉시 만족되지 않아 이를 기다리는 상태

  ex) 디스크에서 file을 읽어와야 하는 경우

Suspended (stopped) :

 - 외부적인 이유로 프로세스의 수행이 정지된 상태

 - 프로세스는 통째로 디스크에 swap out 된다

 ex) 사용자가 프로그램을 일시 정지 시킨 경우,

      메모리에 너무 많은 프로세스가 올라와 있을 때(Medium-term Scheduler에 의해)

New : 프로세스가 생성 중인 상태 (보통 프로세스의 상태로 포함되지 않음)

Terminated : 수행이 끝난 상태 (보통 프로세스의 상태로 포함되지 않음)

 

※ Blocked 와 Suspended 의 차이

Running, Ready, Blocked 모두 CPU 관점에서의 상태 분류일 뿐 실제로 프로세스의 작업이 수행이 되고 있는 상태 (CPU에서 프로세스 수행중(Running), I/O에서 프로세스 수행중(Blocked)), 반면 Suspended 는 프로세스 수행 자체가 외부에 의해 정지된 상태

Blocked : Blocked 자신이 요청한 event가 만족되면 Ready

Suspended : 외부에서 resume 해주어야 Active

 

 

 

 

프로세스의 5가지 state 를 정의하시오. 이들 상태간의 상태전이 다이어그램을 제시하고 , 어떤 경우에 상태가 전이하는 지를 설명하시오 

running : CPU 를 잡고 인스트럭션을 실행 중인 상태

Ready : CPU 를 기다리는 상태

Blocked (wait, sleep) : CPU를 주어도 당장 instruction을 수행할 수 없는 상태 

Suspended (stopped) : 외부적인 이유로 프로세스의 수행이 정지된 상태 , 프로세스는 통째로 디스크에 swap out 된다 New : 프로세스가 생성 중인 상태 (보통 프로세스의 상태로 포함되지 않음)

Terminated : 수행이 끝난 상태 (보통 프로세스의 상태로 포함되지 않음)

 

 

 

 

실행의 모드

1. 유저 모드 : 덜 권한 주어짐, 유저 프로그램은 전형적으로 이 모드에서 실행됨

2. 시스템 모드 : 더 권한 주어짐, 컨트롤 모드 또는 커널 모드로 불림, OS 의 커널

 

 

Process Creation

1. 새로운 프로세스에 하나의 프로세스 식별자를 배정한다.

2. 그 프로세스를 위한 공간을 배정한다.

3. PCB를 초기화한다.

4. 적절한 링키지를 세팅한다

5. 자료구조를 생성 및 확장한다.

(* Termination 은 거꾸로 ) 

 

 

 

Interrupt 와 Trap

- Interrupt : 하드웨어적인 비동기적인 사건의 발생을 커널에게 알리는 방법

- Trap : 소프트웨어적인 동기적인 사건의 발생을 커널에게 알리는 방법

 

Unix 에서 PCB를 process table 과 user area 로 구성하고 있다. 2개의 구조로 분리한 이유?

: Array 구조로 되어있으면 찾는건 빠르지만 메모리 효율이 좋지 않고 Node 구조로 되어있으면 찾는 것이 오래걸리며 에러가 날 수 있지만, 확장성이 좋다. 그래서 이들 구조의 장점들만 모아 Process table(Array 구조) 에 user area(Node 구조)를 붙여 이용하게 된 것이다.

 

 

 

728x90

 

Operating System

응용 프로그램의 실행을 제어하는 프로그램, 하드웨어와 소프트웨어 사이의 인터페이스

목적 : 유저에게 편리함 제공, 효율성 유지, 진화를 수용할 수 있는 인터페이스 역할

 

하는 일?

- 프로그램 개발

- 프로그램 실행

- I/O 디바이스 접근

- 파일 접근 제어

- System 접근

- 에러 탐지와 반응

- 계산

 

Key Interface

1. ISA ( Instruction set architecture )

2. ABI ( Application binary interface )

3. API ( Application programming interface)

 

OS 는 I/O, 주 혹은 보조메모리의 사용과 프로세서 실행 타임을 제어한다. / 일반적인 소프트웨어와 동일한 방식으로 기능한다.

 

 

OS의 발전

CPU 라는 자원을 어떻게 최대한 활용할지?

Serial Processing -> Simple Batch Systems -> Multiprogrammed Batch Systems -> Time Sharing Systems

 

1. Serial Processing

OS가 없었다. 프로그래머는 직접 컴퓨터 하드웨어와 소통해야함. user 는 컴퓨터에 연속적으로 접근해야함. scheduling 문제가 있었다( 낭비되는 컴퓨터 타임 ) , 프로그램 동작 세팅할 때 상당한 시간이 소요됐다. 

 

2. Simple Batch Systems

-일괄처리 시스템/ 초기의 컴퓨터는 매우 비싸기 때문에 프로세스 활용을 최대로 하는 것이 중요했다. 

-유저는 더이상 프로세서와 직접 접근하지 않았다.

-각각의 사용자가 어떠한 요청을하면 비슷한거 끼리 묶어서 한번에 처리하여 연산속도를 향상시켰다. 유사한 요구를 가지는 작업들( 각각의 작업을 job으로 제출)을 모아서 하나의 그룹(jobs로 제출 후 처리)으로 수행한다. 기계적인 입출력 장치의 속도가 CPU 보다 느리기 때문에 CPU가 쉬는 상태가 많았다. 

-실시간 상호작용을 요구하는 상황에 부적합.

 

3. Multiprogrammed Batch Systems

-CPU가 수행할 작업을 항상 가지도록 하는 방식. (=멀티태스킹)

-먼저 하드디스크나 SSD에서 여러 개의 프로그램을 선택해서 메인메모리(RAM) 에 적재한다. 이후 메모리 내에 있는 작업 중 하나를 선택해 차례대로 실행한다. 이때 수행중인 작업이 입출력 때문에 기다리는 상태에 도달하면 CPU 는 다른 작업으로 넘어가서 수행을 계속한다. 이후 첫 번째작업이 끝나면 현재의 작업을 중단하고 다시 첫 번째 작업이 CPU 를 차지하게 된다.  (=> 메모리는 3,4, 혹은  더 많은 프로그램을 지닐 수 있고 그것들 사이에서 switch 할 수 있다. )

- 다중 프로그램 시스템 덕분에 프로그램에서 카드를 읽거나 프린터를 쓰는 등의 시간에도 CPU 를 계속해서 사용할 수 있다. 

 

(<-> Uniprogramming : 프로세서는 입출력에 도달할때까지 , 상당한 시간이 소요되고, 그때동안 아무것도 못하고 기다려야한다)

 

4. Time-Sharing Systems

다중프로그램의 장점을 채택해서 확장.

-프로그램이 아주 짧은 주기로 CPU를 각각의 프로그램에 할당해주는 방법.

-시분할 시스템으로 사용자는 프로그램이 수행되는 동안에도 상호작용할 수 있게 되었다.

-아주 짧은 주기로 전환이 이루어지기 때문에 각 사용자는 모든 프로그램이 동시에 작동한다고 느낀다.

- CTSS 는 초기 시분할 시스템 중 하나이다. time slicing 으로 알려진 테크닉을 활용한다. 

 

 

Process

프로세스는 실행중인 프로그램이다. 실행되는 프로그램의 인스턴스이다. 

 

프로세스 에러 발생

1. 부적절한 동기화  2. 상호 배제 실패  3. 불확실한 프로그램 연산  4. Deadlock

 

프로세스 구성요소

1. 실행중인 프로그램 2. 관련 데이터 3. 프로그램 실행 문맥 

 

 

 

Virtual Memory

-physical 하게 이용가능한 메인메모리 (RAM) 없이도 logical 하게 메모리에 접근하는 프로그램을 허락함

- 메인메모리에 동시에 있는 여러 유저 job들을 가지는 요구 땜 고안되었다.

-실제메모리를 추상화하여 가상 메모리에 올림으로써 프로세스들이 연속된 물리적 메모리 공간처럼 여기게 만들 수 있을 뿐만 아니라 실제 메모리보다 많은 크기의 메모리도 운용이 가능하다.

 

페이징 방식에서는 가상 메모리 상의 주소 공간을 일정한 크기로 분할한다. 

주소공간은 페이지 단위로 나뉘어져있으며 실제 기억공간은 페이지 크기와 같은 프레임으로 나누어 사용한다.

 

 - Frame : 물리 메모리를 일정된 한 크기로 나눈 블록

 - Page : 가상 메모리를 일정된 한 크기로 나눈 블록

 

 

Multithreading

프로세스와 쓰레드 차이

프로세스는 메모리 상에서 실행중인 프로그램을 말하며, 스레드는 이 프로세스 안에서 실행되는 흐름 단위를 말한다. 

프로세스는 최소 하나의 스레드를 보유하고 있으며, 각각 별도의 주소공간을 독립적으로 할당 받는다.(code, heap, stack)

스레드는 이중에 stack만 따로 할당받고 나머지 영역은 스레드끼리 서로 공유한다.

프로세스는 생성에 큰 오버헤드가 있고, ( 프로세스를 생성할때 많은 시간이 소요됨), 프로세스 컨텍스트 스위칭의 비효율성과 프로세스 사이에 통신이 어렵다는 (IPC사용해야함) 등의 문제점이 있다. 그래서  프로세스보다 크기가 작은 실행 단위인 쓰레드는 등장했다. 쓰레드는 프로세스의 생성 및 소멸에 따른 오버헤드를 감소시키고, 빠른 컨텍스트 스위칭이 가능하며, 프로세스들간의 통신 시간, 방법의 어려움을 해소할 수 있다.

 

SMP

-컴퓨터 하드웨어 아키텍쳐를 일컬고, 그 아키텍쳐를 이용하는 OS 행위를 말한다.

-멀티쓰레딩과 SMP 는 종종 같이 논해지나, 다른 용어이다. 

- SMP 는 멀티플 프로세서의 출현이 유저에게 투명하다

 

 

멀티스레드와 멀티프로세스 차이

멀티스레드는 하나의 프로세스에 여러 스레드로 자원을 공유하며 작업을 나누어 수행하는 것이다. 멀티프로세스는 두 개 이상 다수의 프로세서(CPU)가 협력적으로 하나 이상의 작업(Task)을 동시에 처리하는 것이다. (병렬처리)

멀티 스레드는 멀티 프로세스보다 작은 메모리 공간을 차지하고 Contest Switching 이 빠른 장점이 있지만 동기화 문제와 하나의 스레드 장애로 전체 스레드가 종료될 위험을 갖고 있다. 반면, 멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 주지 않아 안정성이 높지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지하는 단점이 있다. 따라서  각 프로세스 간 메모리 구분이 필요하거나 독립된 주소 공간을 가져야 할 경우엔 멀티프로세스를 사용하고,  메모리 공간이나 Context Switching 에서 이점을 보려면 멀티 스레드를 사용한다.

 

 

 

 

윈도우가 제공하는 유저모드 프로세스

1. Special System Processes : 시스템을 관리하는데 필요한 유저모드 시스템

2. Service Process : 디바이스 드라이버 다양한 네트워크 서비스와 협력하는 유저모드 요소

3. Envirionment Subsystems : 다른 OS 환경을 제공

4 User Application : 유저가 시스템 활용하기위한 기능을 제공하는 EXEs , DDL 

 

 

728x90

운영 체제

  • 하나 혹은 그 이상의 프로세서 하드웨어 자원을 이용하는 것
  • 유저에게 일련의 서비스를 제공하는 것
  • 보조메모리와 I/O 장치를 관리하는 것

 

기본 구성 요소

1. 프로세서       2. I/O 모듈        3. 메인 메모리         4. 시스템버스

 

 

1. 프로세서

  • 컴퓨터 작동 제어  
  • 데이터 처리 함수를 수행
  • CPU로 일컬어짐

2. 메인메모리

  • 데이터와 프로그램을 저장
  • 일반적으로 휘발성이다
  • 메모리 내용은 컴퓨터를 끄면 잃어버린다
  • real memoery 혹은 primary memory 로 일컬어진다

3. I/O 모듈

  • 컴퓨터와 외부 장치 사이서 데이터를 이동시키는 것
  • secondary memory(보조기억) 장치( ex 디스크), 터미널, 커뮤니케이션 장치

4. 시스템버스

  • 프로세서, 메인메모리, I/O 모듈 사이에서 통신을 제공한다.

마이크로프로세서

  • 데스크톱과 handneld computing 가져온 발명품
  • 하나의 칩에 하나의 프로세서를 포함한다.
  • 가장 빠른 범용 프로세서이다.
  • 멀티프로세서
  • 각각의 칩은 여러 개의 프로세서(코어)를 포함한다.

GPU

  • 슈퍼컴퓨터에서 나온 SIMD 기술을 사용하여 데이터들 배열에서 효과적인 계산을 제공한다.
  • GPU는 더 작고 보다 전문화된 코어로 구성된 프로세서. 여러 개의 코어가 함께 작동하므로, 여러 코어로 나누어 처리할 수 있는 작업의 경우 GPU가 엄청난 성능 이점을 제공
  • 특정 3D 렌더링 작업 속도를 단축하기 위해 개발된 전문 ASIC로 시작했다.
  • 일반적인 계산 처리에도 사용됨

-게임에서 물리적 시뮬레이션 돌릴때

- 큰 spreadsheets 에서 계산할때

 

DSPs(Digital Signal Processors)

  • 디지털 신호를 처리하는 연산기 라고 한다. 즉 디지털 신호면 무엇이든 처리하는 장치를 말한다. 일상 생활에서 DSP가 사용되는 곳은 주로 오디오 신호 처리, 영상 신호 처리 분야이다. 그래픽 카드에 들어가는 GPU도 DSP의 일종에서 출발했다.
  • 모뎀과 같은 I/o 장치에 내장되어 있었다. (이제는 특히 핸드헬드 분야에서 최고 수준의 컴퓨터 장치가 되고 있다)
  • 여러가지 복잡한 연산들을 진행하는 데에 쓰이는 특수 프로세서
  • 음성 및 비디오 인코딩/ 디코딩(코덱)
  • 암호화 및 보안 지원 제공

SoC(System on a Chip) 

  • 완전 구동이 가능한 제품과 시스템이 한 개의 칩에 들어 있는 것을 말한다. 즉, 하나의 칩 내에서 CPU, GPU, NPU, RAM, ROM, 컨트롤러 등의 다양한 역할을 구현하는 체제이다

 

명령어 수행

- 프로그램은 명령어의 집합이다.

- fetch 와 execute로 명령어는 나눌 수 있다.

 

PC(Program counter) = 명령어 주소

IR = 실행되고 있는 명령어

AC = 임시 저장공간

 

0001 = 메모리에서 AC로 로드

0010 = 메모리에 AC 저장

0101 = 메모리에서 AC에 더하기

 

- 명령어 수행 과정에서 인터럽트가 발생하면 인터럽트 처리 루틴이 호출된다

 

 

인터럽트

하드웨어적인, 비동기적인 사건의 발생을 커널에게 알리는 방법.

 

인터럽트란 하드웨어적인, 비동기적인 사건의 발생을 커널에게 알리는 방법이다. 처리단계는 우선 사용자 수준 실행상태였다면 커널 수준 실행 상태로 전환한다. 현재 수행 중이었던 태스크의 문맥을 저장한 수 인터럽트 원인을 파악한다. IDT 를 이용해 인터럽트 처리 루틴을 호출하고 인터럽트를 처리한다. 그 후 저장되었던 context를 복원한다.

 

 

- 처리단계

1. 현재 사용자 수준 실행 상태였다면 커널 수준 실행 상태로 전환

2. 현재 수행 중이었던 태스크의 문맥 저장

3. 인터럽트 원인 파악

4. IDT 을 이용해 인터럽트 처리 루틴 호출

5. 인터럽트 처리

6. 저장되었던 문맥 복원

 

context saving : 현 프로세스 실행을 잠시 중단해야할 때 후에 계속 실행할 수 있도록 현재 프로세스의 context를 저장하는 방법

.context switching : 현재 실행중인 프로세스의 context 를 저장하고 다음 수행 될 프로세스의 context를 불러오는 작업

 

(* context switiching 이 일어나기 전에 반드시 saving 이 일어나야한다 . 그러나 saving 이 발생했다고해서 반드시 switching 이 발생하는 것은 아니다.)

 

- 만약 다른 인터럽트 처리 중에 인터럽트가 발생하면,, sequential interrup 처리와 nested interrupt 처리 가능,, sequential 은 하나끝내고 다음거 , nested 는 하나 도중에 다음거 

 

 

트랩

소프트웨어적인, 동기적인 사건의 발생을 커널에게 알리는 방법

 

Trap의 종류

- div_by_zero, invalid machine code, page fault, protection fault, system call

- 트랩의 처리 또한 IDT 을 이용한다. ( 트랩은 내부 인터럽트라고 한다.)

(* IDT 는 커널이 초기화 될 때 생성되며, 인터럽트에 대한 정보가 저장되어 있는 테이블이다.)

 

 

System call

태스크가 커널의 서비스를 요청하는 것

트랩 처리 매커니즘에 의해 처리한다.

 

 

Memory Hierarchy

 

- 주기억장치

프로세스가 실행되기 위해선 프로그램이 메모리에 올라와야한다. 프로그램을 보조기억장치에서 주기억장치로 적재시키면 그 프로그램은 실행되어 프로세스가 된다. OS 가 사용하는 커널영역과 User 가 사용하는 사용자영역으로 구분

 

- 보조메모리

secondary memory, auxiliary memory, 휘발하지 않

 

-  캐시메모리

주기억장치에 저장된 내용의 일부를 임시로 저장해두는 기억장치

CPU와 주기억장치 사이의 속도 차이로 인한 성능 저하를 방지하기 위한 방법

속도가 주기억장치보다 빠르.

 locality: 최근에 사용한 것은 또 사용할 가능성이 높기에 가까운 곳에 놔둬서 빠르게 처리할 수 있도록 캐시메모리에 적재한다. 

 

DMA

입출력장치와 메모리 사이 데이터 흐름에서 CPU를 배제하기 위해 사용하는 입출력 제어 방식.

예를 들어 하드디스크에서 메모리로 데이터를 이동시킨다. 이때 가장 기본적인 방식인 Programmed I/O(Polling) 방식으로 구현하면 하드디스크에서 데이터를 꺼낸 후 시스템 버스를 통해 CPU 레지스터에 옮겨지고 다시 시스템 버스를 통해 CPU 레지스터에서 메모리로 이동한다. 가장 큰 문제는 입출력 시간 동안 CPU가 idle 상태로 대기하는 것이다. I/O 디바이스에 비해 CPU는 비교할 수 없을 정도로 고속이기 때문에 그 시간을 낭비한다는 것은 상당히 비효율적이다.

 

DMA 동작 순서는 아래와 같다.

 

1. 입출력장치가 CPU에게 입출력 요청

2. CPU가 DMA 컨트롤러에 명령 송신

3. DMA가 CPU에게 시스템 버스 사용 요청

4. CPU가 버스 사용 허가(CPU가 버스 사용 포기)

5. DMA 컨트롤러가 입출력장치에서 데이터 읽은 후 메모리로 전송

6. 전송 완료 후 CPU에게 완료 신호 송신

 

 

 SMP

SMP는 'Symmetric Multi-Processor'(대칭형 다중 프로세서)의 약어로, 두 개 이상의 동일한 CPU 코어가 기본 메모리에 대한 액세스를 공유하는 디자인

 

 

 

멀티 코어 컴퓨터

-a chip multiprocessor 라고도 알려져있다.

-하나의 실리콘 조각에 2개 혹은 그 이상의 프로세서를 결합한다. 

- 멀티코어 칩들은 또한 L2 캐시를 포함한다. 그리고 몇몇 케이스에선 L3 캐시를 포함한다. 

 

728x90

+ Recent posts