목록분류 전체보기 (277)
ecsimsw
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bYU89o/btqyQzb2Wu6/jp4Tka65oxzsJcBFyQ4j5k/img.png)
Dead Lock - P1과 P2가 각각 R1, R2 자원을 사용 중이다. P1은 t0 시점에서 R1,R2를 동시에 사용하여 작업을 처리해야하고, P2는 그보다 조금 이후인 t1에서 두 자원을 엑세스 해야한다. - t0에서 R2를 엑세스하고자 했던 P1은 R2가 반환될 때까지 기다리고, t1에서 R1을 엑세스하고자 했던 P2 역시 P1이 작업을 처리하여 R1을 반납하기를 기다리게 되어, 둘은 무한 기다림에 빠질 것이다. - 이런 교착 상태를 Dead Lock이라고 한다. Dead Lock Necessary Condition - Dead Lock은 다음의 4가지 상태를 모두 만족하는 상황에서 발생한다. 1. Mutual exclusion 2. Hold and Wait 3. No Preemption 4. C..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b3kDRW/btqyPU1Qwrc/yrra4iPzBlbEkwJd5UOJ9k/img.png)
Traditional synchronization example - producer and consumer problem - Readers and Writers problem - Dining Philosopher problem Producer and Consumer problem - 생산자는 일방적으로 데이터를 생성하고, 소비자는 그것을 소비하는 상황에서 발생하는 문제이다. - 생산자와 소비자의 데이터 처리 속도 차이로, 생산된 데이터를 날리는 것이 아닌 유한 크기 버퍼(bounded buffer)에 임시 저장하고, 소비자는 이를 차례로 사용하는 상황을 생각해보자. Pro1 _ Critical section : 우선 버퍼 크기를 알 수 있는 buffer_count 변수가 생성자에 의해선 증가하고, 동시에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cbm1Mi/btqyHVUbil2/69KOjFB6I08pF0IGwEvfC0/img.png)
Semaphore 동기화를 위한 소프트웨어적 도구로, critical point를 엑세스하는 사용자의 수를 제한하고, 제한 인원 외의 프로세스는 LIST에 넣어 이를 순차적으로 관리한다. 프로세스 제한 수를 관리하는 변수 value와 Wait(), Signal() 두 함수로 이루어져 있다. value는 음수일 때, 그 절댓 값은 대기 중인 프로세스의 수이다. Wait은 value를 확인하여, 그 값이 0보다 작은 값, 즉 1개 이상의 대기가 존재하면 현재 프로세스를 대기열에 넣어두고 block 호출로 프로세스를 중지한다. Signal은 value가 양수이면 아직 사용자 수가 제한 수보다 적음을 의미하므로 무시하고, 0이하의 값, 즉 대기하는 프로세스가 있는 상황에서는 rellease를 통해 사용자 한명을..
Critical section problem - 멀티 스레딩을 이용하여 공통된 변수를 다룰 경우 각각의 스레드가 어느 순간에 변수를 엑세스하는가에 따라 결과값이 다를 수 있다는 문제가 발생할 수 있다. - 이런 Common variable을 update하는 code section을 Critical section이라고 한다. ex1) 값이 10인 정수형 변수 i를 두 스레드 A,B에서 각각 i++ 을 실행한다고 생각해보자. "정상적인 경우" i=10이 메인 메모리에 저장되어 있음 1. thread A) 메인 메모리의 i=10를 꺼내 연산을 위해 레지스터에 저장 2. thread A) 레지스터의 i=10에 1을 더해 i=11 값을 얻음 3. thread A) i=11을 메인 메모리에 저장 후 context ..
Process creation / termination - 프로세스는 프로세스에 의해 생성된다. - 운영체제가 init (PID =1) 프로세스를 만들어두고, 그 프로세스가 자식의 자식을 낳아 트리를 형성한다. ** 모든 프로세스는 고유의 ID (PID)를 갖는다. fork : 새로운 프로세스 생성 exec : 메모리 공간을 새로운 프로그램으로 교체 exit : 프로세스 종료 Zombie process / Orphan process Orphan process : 부모 프로세스와 자식 프로세스는 항상 짝을 이뤄야한다. 부모 프로세스가 자식 프로세스보다 먼저 소멸할 경우 자식은 부모를 잃고 orphan process가 된다. - orphan phan process는 kernel에 의해 init 프로세스를 부..
Cpu scheduling preemtive (선점형) - 우선 순위에 따라 cpu에서의 프로세스의 연산이 다 종료되기 전에 다른 처리가 cpu 자리를 양보받는다. - 현대 멀티 프로세스 환경에 더 적합하다. non-preemtive (비선점형) - I/O interrupt로 대기 상태에 들어가지 않는 한 cpu를 독점하여 프로세스의 연산이 종료되어야만 다른 스케쥴링이 가능하다. - 스케줄러의 호출 빈도가 적고, context switching overhead가 적다. Schedule criteria 1. cpu utilization : CPU 점유율 2. throughput : 시간 당 처리율 3. turn around : 어떤 작업이 생성부터 처리되기까지의 시간 4. waiting time : rea..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cA2SO2/btqywwEVyLc/pWSGqgMQ7e2Qelr1w653J0/img.png)
Process - Program in execution - states : new / ready/ running / waiting / terminated Process Control Block (PCB) - 하나의 프로세스 당 하나의 PCB 할당. 프로세스의 정보를 저장한다. - state, pc, register information, mmu information, cpu time, pID, list of open files - 레지스터 정보는 인터럽트 이후 복구 시 이전 레지스터 상태를 알아야하기 때문에 저장하고, pID는 프로세스 ID, pc는 program counter로 명령어의 위치 주소를 가리킨다. Job Queue Scheduler Queue안의 process(job)의 할당 순서를 정해주..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dyvXzc/btqyt5H8dn6/QO968GJtyoQ1QuOPytiRR0/img.png)
Internal Interrupt - program check : 오버플로우, 언더플로우나 Division by zero가 일어날 때 발생. - Page Fault : 무효한 페이지를 참조할 때 발생. - Trace : 디버그 시 프로그램을 한 명령씩 실행. - Superviser Call : 시스템 콜을 실행. External Interrupt - power fail : 전원에 이상이 생길 경우 발생. - hardware check : 주변 기기의 장애가 발생했을 경우 OS에게 알리기 위한 인터럽트 발생. - Timer : 일정 시간마다 하드웨어에서 발생. - I/O : 입출력 장치에서 동작을 처리하는 등 상태 변화가 일어났을 때 발생. - console : 사용자가 키보드와 같은 입출력 장치를 조작할..