메모리 관리 전략 배경 CPU는 PC가 지시하는 메모리로부터 다음 수행할 명령어를 가져온다. 필요에 따라 메모리와 데이터를 주고 받는다. 명령어를 가져오면 해독하고 메모리에서 피연산자(operand)를 가져온다. 피연산자에 대해 명령어를 실행한 후, 계산 결과를 메모리에 저장한다. 기본 하드웨어 운영체제를 보호하기 위해, 각 프로세스가 독립된 메모리 공간을 갖도록 보장해야 한다. 프로세스가 점유할 메모리의 주소 영역을 구한다. 이를 base register라고 한다. 프로세스가 차지할 수 있는 메모리의 영역엔 한계점이 있다. 이 끝 점을 limit register로 관리한다. base 주 메모리에 적재되어야 한다. 디스크에서 주 메모리로 적재되기를 기다리는 프로세스들을 Input Queue라고 한다. 대..
Computer Science/운영체제
Memory Allocation Memory Allocation 정책 Continuous Memory Allocation 프로세스를 하나의 연속된 메모리 공간에 할당 고려 사항 Multi programming degree : 프로그램을 연속된 메모리에 할당하는 형태로 몇 개나 올릴 수 있는가? 연속된 공간을 어떻게 분할하여 할당할 것인가? 각 프로세스에게 얼마 만큼의 메모리 공간을 할당할 것인가? Uni-Programming 하나의 프로세스만 메모리에 할당 (가장 간단) 고려 사항 프로그램의 크기가 메모리의 크기보다 크다면? 현재 필요한 부분만 잘라 내어 메모리에 할당한다. 자르는 것은 프로그래머의 역할이다. 사용자가 프로그램의 흐름/자료구조를 완전히 파악하고 있어야 한다. 메모리가 커널 영역을 침범할..
메모리 관리 메모리 계층 구조 Block 보조기억장치와 주기억 장치 사이의 데이터 전송 단위 OS마다 차이는 있으나, 일반적으로 1~4 kb 1 Byte만 사용하더라도 Block 단위로 메모리에 올라간다. Word CPU(레지스터)와 주기억장치(메모리) 사이의 데이터 전송 단위 16 ~ 64 bit의 크기를 갖는다. Address Binding Compile time binding 프로세스가 적재될 메모리의 위치를 100% 아는 경우(절대 위치 사용) 한 번 적재되면 위치가 변하지 않는다. 프로그램 전체가 메모리에 적재된다. Load time binding 메모리 적재 위치를 컴파일 시간에 모르는 경우, 대처 가능한 상대 주소를 생성 0번에 데이터 A가 적재된다고 가정 실제로 프로그램을 실행시켰더니 40..
교착 상태(Deadlock) 다중 프로그래밍 환경에서 둘 이상의 프로세스가 함께 멈추어 버리는 현상 정상적으로 작동하는 상태라면 프로세스는 다음 상태로만 자원을 요청할 수 있다. 요청 프로세스는 자원을 요청한다. 요청이 즉시 허용되지 않으면 프로세스는 자원을 얻을 때까지 대기한다. 사용 프로세스는 자원에 대해 작업을 수행할 수 있다. 예를 들어 자원이 프린터라면, 프로세스는 그 프린터로 인쇄할 수 있다. 방출 프로세스가 자원을 방출한다. 필요 조건 상호 배제(Mutual Exclusion) 임계 구역에 접근할 수 있는 자원의 수가 제한된다. 점유 및 대기(Hold and wait) 프로세스가 자원을 점유하고 있는 상태이나 다른 프로세스의 자원을 얻기 위해 대기하고 있다. 비선점(No preemtion) ..
프로세스 동기화 여러 개의 프로세스가 공유 데이터에 동시 접근한 경우, 예상치 못한 문제 혹은 결과가 발생할 수 있다. Synchronization은 이러한 문제를 해결하기 위해 도입된 개념으로, 동시 접근을 아예 금지하거나 제약 조건을 둔다. 결과적으로 Data의 일관성을 보장한다. 생산자와 소비자 문제 예시 생산자 아이템 수를 나타내는 count값을 갖는다. count = buffer size이면 바쁜 대기를 수행한다. 여유 공간이 생기면 아이템을 생성하고 count를 1 증가시킨다. 소비자 buffer에 아무런 데이터가 없으면 바쁜 대기를 수행한다. buffer에 데이터가 존재하면 그 데이터를 소비하고 count를 1 감소시킨다. 생산자와 소비자가 개별적으로 동작하면 적절하게 동작하지만, 병렬적으로..
프로세스 스케줄링 프로세스 스케줄러는 CPU에서 실행 가능한 여러 프로세스 중 하나의 프로세스를 선택한다. 그 프로세스는 CPU의 자원을 할당받고 실행된다. 스케줄링 큐 프로세스 스케줄링은 큐잉 도표로 나타낸다. Job Queue 프로세스가 시스템에 들어오면 잡 큐에 놓인다. 잡 큐는 시스템 안의 모든 프로세스로 구성된다. Ready Queue 준비 완료 상태이며 주 메모리에서 실행 대기 중인 프로세스가 위치하는 장소이다. CPU를 할당(dispatch)받으면 Ready Queue에서 제거한다. Ready Queue는 일반적으로 연결 리스트이다. 각 노드는 PCB이다. Ready Queue의 헤더는 리스트의 첫번째와 마지막 PCB를 가리키는 포인터를 갖는다. 각 PCB는 Ready Queue에 있는 다음..
Inter-Process Communication 개념 프로세스는 시스템으로부터 자원을 할당받는 하나의 독립된 개체이다. 본래 프로세스는 할당된 자원(메모리) 범주 내의 정보만 접근할 수 있으며, 이를 벗어나는 경우 Segmentation Fault 등의 오류가 발생한다. 이는 커널이 프로세스의 안정성을 위해 다른 프로세스로 접근하는 것을 막기 때문이다. pipe 통신을 위한 메모리 공간(버퍼)을 생성하여 프로세스가 데이터를 주고받는 기법 각 프로세스가 Read only, Write only 모드로만 동작한다. 통신이 필요할 때마다 파이프를 생성해야 하기 때문에 자원의 낭비가 심하다. 100개의 프로세스가 2개의 파이프로 서로 통신하면 100P2 = 9900개의 파이프가 생성된다. pipe 관련 syst..