목록Computer Science/Operating system (34)
ecsimsw
Contiguous Memory Allocation - 하나의 프로세스는 연속된 메모리 영역을 갖는다. 이런 연속 메모리 할당이 반복되면 메모리안의 프로세스 사이에 간격 (hole)이 발생할 것이고, 이 hole의 불연속 생성이 지속되면 홀 영역을 합치면 충분한 크기의 프로세스가 영역이 떨어져 로딩이 불가능한 상황이 발생하게 된다. 이를 external fragmentation, 외부 단편화라고 한다. Memory Allocation Method - first fit : 순차적으로 빈공간을 찾아서 바로 할당한다. - best fit : 사이즈가 가장 유사한 공간을 찾아서 할당한다. - worst fit : 사이즈가 가장 먼 공간을 찾아 할당한다. > 속도 측면에선 first fit, 이용율 측면에서는 b..
Link / Load MMU ( Memory management unit ) - 메모리 영역 보호 : 다른 프로세스 영역으로 침범할 수 없도록 보호한다. - Address translation : register에 cpu에서의 주소 (logical address)와 실제 적재된 메모리 위치 (physical address)의 차이를 따로 저장하여, 프로세스가 가변적인 위치로 메모리에 저장되어도, CPU는 상관없이 기존 논리 주소를 사용할 수 있도록 한다. Prevent memory waste - Dynamic load : 프로그램을 메모리에 load할 때, 동적으로 필수적인 부분만 먼저 올리고, 부가적인 부분은 대상에서 제외하는 것이다. 프로그램 내의 모든 데이터, 모든 class가 다 사용되는 것은 아..
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..
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 변수가 생성자에 의해선 증가하고, 동시에..
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 프로세스를 부..