본문 바로가기

Publivate

(215)
07. Deadlocks (1/2) 1. Deadlock(교착상태): 일련의 프로세스들이 서로가 가진 자원을 기다리며 block된 상태가. 자원: 하드웨어와 소프트웨어 모두 포함-> Request, Allocate, Use, Release 나. 발생조건1) Mutual Exclusion(상호 배제): 매 순간 하나의 프로세스만이 자원을 사용할 수 있음 2) No Preemption(비선점): 프로세스는 자원을 스스로 내어놓을 뿐 빼앗기지 않음 3) Hold and Wait( 보유대기): 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있음 4) Circular Wait(순환대기): 자원을 기다리는 프로세스간에 사이클이 형성되어야 함다. 자원할당 그래프1) 그래프에 Cycle이 없으면 deadlock이 아니..
06. Process Synchronization (5/5) (Concurrency Control) Process Synchronization(프로세스 동기화) = Concurrency Control(병행 제어) 1. Semaphore: P연산-자원 획득, V연산-자원 반납 2. Monitor: 모니터 내에서는 한 번에 하나의 프로세스만이 활동 가능 가. Conditional variable: wait과 signal로만 접근 가능나. 생성자: 빈 buffer가 없다면 wait으로 줄 세움, 빈 buffer가 생기면 signal로 진행시킴다. 소비자: buffer가 모두가 비어 있다면 wait, 내용이 들어있는 buffer가 있는데 기다리고 있으면 signal로 깨움
06. Process Synchronization (4/5) 1. Semaphore가. P(S): S.value-- //prepare to enterif (S.value 비어있는 버퍼의 개수가 자원임 (세마포어에서는 자원의 개수를 카운트함) 나. Consumer1) 같은 버퍼에 동시에 데이터를 꺼내는 문제-> lock을 걸고 데이터를 꺼냄2) 모든 버퍼가 비어 있음 즉, 꺼낼 데이터가 없음-> 데이터의 수가 자원의 수임 3. Readers-Writers Problem: DB에 Write ..
06. Process Synchronization (2/5), (3/5) 1. 충족 조건가. Mutual Exclusion(상호 배제): 어떤 프로세스가 critical section에 있으면 다른 모든 프로세스들은 들어가면 안 된다. 나. Progress(진행): Critical section에 아무도 업을 때, 프로세스가 들어가고 싶으면 들어갈 수 있어야 한다. 다. Bounded Waiting(유한 대기):Critical section에 들어가려고 요청한 후 허용되기 전까지 너무 기다리면 안 됨(횟수 제한) 2. 알고리즘가. int turn;initially turn = 0 //들어갈 차례do{while (turn != 0); //my turn?critical sectionturn = 1 // Now it's your turnremainder section} while(..
05. CPU Scheduling (3/3) / 06. Process Synchronization (1/5) 1. Scheduling이 필요한 이유: CPU를 오래사용 하는 프로세스와 사용자와 상호작용하는 프로세스 등 종류가 많으므로-> 작동방식이 다양하기 때문에 모두 똑같이 주는 것이 효율적이라 볼 수 없다. 2. Mulilevel Queue: 우선순위 별로 프로세스의 큐를 가지고 있음-> 우선순위 우선, 같은 순서끼리는 먼저 온 순서가. Ready queue를 여러 개로 분할: 각 큐마다 독립적인 스케줄링 알고리즘을 가짐 1) foreground (interactive): 라운드 로빈 방식 2) background (batch - no human interaction): fcfs 먼저 온 순서대로 하는 방식 다. 큐에 대한 스케쥴링이 필요1) Fiexed priority scheduling2) Time sl..
05. CPU Scheduling (2/3) 1. CPU Scheduler Algorithm가. Nonpreemptive Scheduler Alogorithm(비선점형): CPU를 빼앗지 않는 알고리즘1) FCFS(First-Come First-Served): 먼저 온 순서대로 처리하는 방식->Convoy effect: 오래 걸리는 프로세스가 먼저 오면 비효율적이게 됨2) SJF(Shortest-Job-First): 가장 짧은 프로세스를 먼저 하는 방식 (선점과 비선점 둘 다 있음)-> Starvation: 짧은 프로세스들이 계속 오게 되면 긴 프로세스는 영원히 처리를 못 할 수도 있음-> CPU burst time을 미리 알 수가 없다.3) Priority Scheduling: 가장 높은 우선순위를 가진 프로세스를 먼저 하는 방식 (우선순위를 정..
04. Process Management (2/2), 05. CPU Scheduling (1/3) 1. 자원의 공유: 자식이 부모를 그대로 copy하기 때문에 메모리 낭비가 될 수 있음 -> 몇몇 OS에서는 일단 copy하지 않고 공유하고 있음-> 내용이 달라질 때까지 기다림 (Copy-on-Write, COW) 2. fork() 시스템 콜: fork() 수행 시 반환값으로 id를 반환함, fork() 수행한 시점에서 시작함 (Program Counter까지 복사됐기 때문에) 가. id가 0일 경우, 자식나. id가 0이 아닐 경우, 부모 3. exec() 시스템 콜-> execlp(): 인자로 넘겨진 새로운 프로그램을 실행 (일반적으로 자식에게 새로운 프로그램을 덮어씌울 때 사용) 4. wait() 시스템 콜: 호출한 부모는 sleep 상태(block 상태)로 만들고, 자식이 종료할 때까지 기다림 ..
04. Process Management (1/2) 1. 프로세스 생성가. 주체: 부모 프로세스가 자식 프로세스를 생성 (방법은 복제 생성) 나. 구조: 계층 구조(트리)다. 자원: 운영체제로 받고, 부모와 공유한다.1) 자원 공유: 부모와 자식이 공유하는 모델과 공유하지 않는 모델이 있다.라. 수행(Execution): 부모와 자식이 공존하는 모델과 부모가 자식이 종료할 때까지 기다리는 모델이 있음마. 복제법: 자식이 부모 공간의 복사함 (복제한 곳을 새로운 프로그램으로 덮어쓸 수도 있음)ex) 1) fork() 시스템 콜을 활용해 새로운 프로세스를 생성2) exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림3-1) 자발적으로 exit() 시스템 콜을 통해 종료시킴가) 자식이 부모에게 데이터를 보냄(자식이 wait 시스템 콜을 통해서)3-2)..