본문 바로가기

Computer Science

(27)
[운영체제] CH7. Deadlock Deadlock (교착상태) 데드락이란 일련의 프로세스들이 서로가 가진 자원을 기다리며 block된 상태이다. 이때 말하는 자원(Resource)는 하드웨어, 소프트웨어 등을 포함하는 개념이다. 물리적인 것 뿐만 아니라 개념적인 것도 포함한다. e.g) I/O device, CPU cycle, memory space, semaphore, PID, 포트 번호, IP 주소, lock 등 그리고 프로세스가 자원을 사용하는 절차는 요청(Request), 할당(Allocate), 사용(Use), 반납(Release)과 같은 네 단계를 거친다. Deadlock 발생의 4가지 조건 데드락은 다음과 같은 네가지 경우에 반드시 발생한다. Mutual Exclusion (상호 배제) 매 순간 하나의 프로세스만이 자원을 사..
[운영체제] CH6. Process Synchronization(2) Classical Problems of Synchronization Bounded-Buffer(유한한 버퍼) Problem (=Producer-Consumer Problem) 버퍼의 크기가 유한한 환경에서 발생한다. 이 문제에는 Producer 프로세스들과 Consumer 프로세스들이 존재한다. Producer Empty 버퍼가 있는지? - 없으면 기다린다. 공유 데이터에 lock을 건다. Empty buffer에 데이터 입력 및 buffer를 조작한다. Lock을 푼다. Full buffer 하나를 증가시킨다. Consumer Full 버퍼가 있는지? - 없으면 기다린다. 공유 데이터에 lock을 건다. Full buffer에서 데이터를 꺼내고 buffer를 조작한다. Lock을 푼다. Empty bu..
[운영체제] CH6. Process Synchronization(1) 여러 주체가 하나의 데이터를 동시에 접근하려는 경우를 Race Condition(경쟁 상태)이라고 한다. 데이터의Race condition이 있으면 데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라진다. 즉, 결과가 접근의 순서에 의존적이다. -> 결과가 안정적이지 않다. 따라서 Race condition을 막기 위해서는 Concurrent process는 동기화(Synchronize)되어야 한다. 멀티 프로세서 시스템에서 공유 메모리를 사용하는 프로세스들 간 커널 내부 데이터를 접근하는 루틴들 간에 e.g) 커널 모드 수행 중 인터럽트로 커널 모드가 다른 루틴을 수행 시 Race condition이 발생할 수 있다. 구체적으로 다음과 같은 세 가지 경우를 볼 수 있다. Kern..
[운영체제] CH5. CPU Scheduling(2) Scheduling Algorithms FCFS (First-Come First-Served) 요청한 순서대로 처리하는 단순한 알고리즘이다. Nonpreemptive scheduling이며, 비효율적인 알고리즘이다. Burst time이 긴 프로세스가 먼저 도착한다면, 짧은 프로세스들은 무작정 기다릴 수밖에 없다. Time-sharing system에서 interacitve job의 응답시간이 길어지기 때문에 좋은 스케줄링 기법이 아니다. 만약 burst time이 짧은 순서대로 들어온다면, FCFS는 프로세스의 순서에 따라 waiting time에 상당한 영향을 끼친다. 문제점 Convoy effect 이 발생한다. 한 프로세스를 기다리기 위해 여러 프로세스들이 떼지어(convoy) 기다리게 되는 현상..
[운영체제] CH5. CPU Scheduling(1) CH5. CPU Scheduling CPU and I/O Bursts in Program Execution 모든 프로그램은 실행하면서 거치는 다음과 같은 일련의 path가 존재한다. 프로그램의path는 CPU를 사용하는 일과 I/O 요청에 대한 응답을 기다리는 일을 반복한다. CPU를 연속적으로 사용하면서 인스트럭션을 수행하는 단계를 CPU Burst이라고 부르고, I/O를 수행하는 단계를 I/O Burst라고 부른다. CPU-burst Time의 분포 I/O작업이 빈번한 작업(I/O bound job)이 있는 반면, CPU를 많이 사용하는 작업도 있다(CPU bound job). 사용자와 직접적으로 연관이 많은 interactive job에게 적절한 response를 제공해주어야 한다. 사용자가 너무 ..
[운영체제] CH4. Process Management CH4. Process Management 프로세스의 생성 (Process Creation) 부모 프로세스(Parent process)가 자식 프로세스(Child process)를 생성한다. 하나의 부모 프로세스는 여러 개의 자식 프로세스를 생성할 수 있다. 따라서 프로세스는 트리(계층 구조)를 형성한다. 프로세스는 자원(resources)를 필요로 하는데, 이는 운영체제로부터 받거나 부모 프로세스와 공유하는 형태를 갖는다. 자원의 공유 형태 부모와 자식이 모든 자원을 공유하는 모델 일부를 공유하는 모델 전혀 공유하지 않는 모델 - 일반적인 모델 일반적으로 부모와 자식프로세스는 서로 자원을 경쟁하는 관계가 된다. * Copy-On-Write(COW): Write가 발생했을 때 Copy를 하겠다. -> 내..
[운영체제] CH3. Process(2) Thread A thread(or lightweight process) is a basic unit of CPU utilization 쓰레드는 프로세스 내부에 있는 CPU 수행 단위이다. 각각의 쓰레드는 Program Counter register set stack space 로 이루어져 있다. 쓰레드가 동료 쓰레드와 공유하는 부분(=task) code section data section OS resources 같은 일을 하는 여러 개의 프로세스를 띄어놓으면 프로세스마다 각자의 주소 공간이 만들어져 메모리 낭비가 된다. 이런 경우에 주소 공간을 하나만 띄어놓고 각자 다른 부분의 코드를 실행할 수 있게 하는것이 쓰레드의 개념이다. 프로그램의 실행 위치를 가리키는 Program Counter를 여러 개를 ..
[운영체제] CH3. Process(1) CH3. Process Process is a program in execution 프로세스란 현재 실행중인 프로그램을 말한다. 그리고 프로세스의 현재 상태를 나타내는 모든 것을 프로세스의 문맥(Context) 이라고 한다. 프로세스의 문맥(Context)이란? 프로그램이 무엇을 어떻게 실행했는지, 현재 상태가 어떤지를 정확하게 나타내기 위해 사용되는 개념이다. 특정 시점을 놓고 봤을 때, 이 프로세스가 어디까지 수행을 했는지를 규명하는데 필요하다. 프로세스가 시작되면 그 프로세스만의 독자적인 주소공간을 가지는데, (code data stack) 프로세스가 CPU를 잡게 되면 CPU 내부의 Program Counter가 code의 어느 공간을 가리키고 있고, 인스트럭션을 읽어와서 연산을 수행한다. 현재 ..