반응형
프로세스 (Process)
- 프로세스란 실행 중인 프로그램을 의미한다. (프로그램 그 자체는 프로세스가 아님)
- 아래 사진은 프로세스가 메모리에 로드되어 있는 모습이다.
- 0 주소는 프로세스의 시작 위치 주소이고, max 표시는 프로세스의 마지막 주소를 의미한다.
- Text section : 프로그램의 명령들, 즉 코드들을 의미한다 + 코드가 실행 중이기 때문에 PC와 같은 프로세서 레지스터를 포함
- Stack : 함수의 동작과 관련된 내용들이 저장되어 있음 ex) 함수의 복귀주소, 로컬 변수, 함수의 매개변수와 같이 임시적인 자료를 가지는 것들
- Data : 전역 변수가 포함되어 있음
- Heap : 동적으로 메모리가 할당 되었을 경우 사용됨 ex) C언어의 malloc
- 화살표 부분 : 프로세스의 영역이긴 하지만, 아직 사용되고 있지 않은 빈 공간. 힙과 스택의 메모리 사용 여부에 따라 공간이 달라짐
프로세스 상태 (Process State)
- new : 프로세스가 생성 중
- ready : 프로세스가 처리기에 할당되기를 기다림
- running : 명령어들이 실행되고 있다.
- waiting : 프로세스가 어떤 사건이 일어나기를 기다린다.
- terminated : 프로세스의 실행이 종료되었다.
프로세스 제어 블록
- 커널이 개별 프로세스를 관리하기 위해서 유지하는 자료구조 (커널은 프로세스들의 PCB를 모아서 링크드리스트로 관리한다)
- 한 프로세스에 해당하는 모든 정보들이 담겨 있다.(프로세스마다 PCB가 존재한다)
- 프로세스가 생성되면 PCB도 생성되고, 프로세스가 삭제되면 PCB가 삭제됨
- Process state: 프로세스의 상태 정보를 담겨있다(프로세스의 상태가 바뀔 떄 이곳의 정보가 바뀜)
- Process ID : PID 즉, 프로세스 아이디(정수로 표현됨)
- Program Counter : 현재 실행중인 명령의 위치를 담고 있는 레지스터(CPU의 PC값의 복사본을 저장해놓음) => 상태가 running 아닐 때만 의미 있음
- CPU registers : PC 레지스터를 제외한 CPU 레지스터 값들의 복사본들이 저장되어 있음, 프로세스의 실행이 멈췄다가 다시 실행할 때 아주 중요한 정보이다.
- CPU scheduling information : 우선순위, 스케쥴링 포인터 값이 저장되어 있음
- Memory-management information: 할당 받아 사용되고 있는 메인 메모리 위치
- Accounting information : 자원 사용 기록이 저장되어 있음
- I/O status information : 프로세스의 입출력 관련 정보가 들어있음
프로세스 스케쥴링(Process Scheduling)
멀티 프로그래밍의 목적은 CPU 목적을 극대화하기 위해서, 항상 어떤 프로세스가 실행되도록 하는 데 있다.
시분할(time sharing)의 목적은 각 프로그램이 실행되는 동안 사용자가 상호 작용할 수 있도록 프로세스들 사이에서 CPU를 빈번하게 교체하는 것이다.
이 목적을 달성하기 위해 프로세스 스케쥴러는 CPU에서 실행 가능한 여러 프로세스들 중에서 하나의 프로세스를 선택한다.
- 스케줄링 큐 (Scheduling Queues)
- 스케줄링 큐마다 해당 큐에 대해서 동작하는 스케쥴러가 있다고 보면 됨
- ready queue : 메인 메모리에 있으면서 즉시 실행 가능한 프로세스들의 큐 (프로세스 상태가 ready인 상태)
- device queue: 장치마다 한 개씩 존재, 해당 디바이스에 대해 입출력을 개시하고 완료를 기다리는 큐(device queue에 속한 프로세스의 상태는 wating)
- Job queue: 시스템에 있는 모든 프로세스들이 포함되어 있는 큐
- 스케줄링 큐마다 해당 큐에 대해서 동작하는 스케쥴러가 있다고 보면 됨
스케쥴러(Schedulers)
- 단기 스케쥴러 (short-term scheduler / cpu scheduler) : 다음번에 사용할 프로세스를 선택해서, 해당 프로세스에게 CPU를 할당하는 스케쥴러 (ready queue에 대해 동작)
- 매우 빈번하게 실행 됨
- 장기 스케쥴러 (long-term schelduler /job scheduler) : 어느 프로세스를 ready queue로 가져올지 결정하는 스케쥴러 (프로세스 상태를 new->ready 상태로 바꿀지 결정함)
- 단기 스케쥴러만큼 빈번하게 동작하지 않음
- 중기 스케쥴러 (medium-term scheduler) : 메인 메모리에서 동작하는 프로세스를 swap disk라는 곳으로 잠깐 swapping 시켜서 메인 메모리 공간을 확보
문맥 교환 (Context Switch)
- 프로세스 사용이 전환될 때(p0->p1) P0가 사용되던 레지스터 값들을 p0의 PCB에 저장해야 한다. p1은 자신의 PCB에서 레지스터 값들을 불러온다.
- 즉, CPU가 이전의 프로세스 상태를 PCB에 보관하고, 또 다른 프로세스의 정보를 PCB에 읽어 레지스터에 적재하는 과정
- PCB에 context가 저장되어 있다.
- Context Switch 시간 자체는 시스템의 Overhead라고 할 수 있다. 이유는 시스템은 무조건 Context Switching을 해야 하나 그 행위 자체가 OVerhead라는 것이다. 가급적 Context Switch는 가능한 자주 하지 않고 짧게 하는 것이 좋다.
출처 - 공룡 책 (Operating System Concepts)
반응형
'CS > OS' 카테고리의 다른 글
[OS]프로세스 간 통신(Interprocess Communication) (0) | 2021.04.30 |
---|---|
[OS]프로세스 연산 (Operations on Processes ), 시스템 콜(System Call) (0) | 2021.04.30 |
[OS]멀티프로그래밍(Multiprogramming) (0) | 2021.04.27 |
[OS]운영체제 구조 (Operating System Structure) (0) | 2021.02.19 |
[OS]캐싱(Caching) 이란? (0) | 2021.02.15 |