1. 프로세스의 개념
프로세스(process) ? 메모리에 올라가서 실행 중인 프로그램
- 프로그램? : 디스크에 실행파일 형태로 존재하는 것
프로세스를 이해하기 위해 알아야 하는 것
- 프로세스의 문맥(context) : 프로세스가 현재 어떤 상태에서 수행되고 있는 지 정확히 규명하기 위한 필요한 정보
- (예시) 시분할 시스템 환경에서 타이머 인터럽트에 의해 CPU를 짧은 시간동안 사용 후에 다시 획득하는 방식으로 작동한다. 이때 CPU를 다시 획득한 경우 이전에 정확하게 어느 부분까지 수행했는지를 알기 위해 필요한 정보
- < 구성 >
- 하드웨어 문맥 : CPU의 수행상태- 프로그램 카운터 값 과 각종 레지스터에 저장하고 있는 값들
- 프로세스의 주소공간 : 코드, 데이터, 스택으로 구성된 공간, 프로세스의 문맥을 결정짓는 중요한 요수 중 하나
- 커널상의 문맥 : 프로세스를 관리하기 위한 자료구조를 유지
2. 프로세스의 상태
- 3가지: 실행(running), 준비(ready), 봉쇄(blocked, wait, sleep)
- 실행 상태 : 프로세스가 CPU를 소유하고 기계어 명령을 실행하고 있는 상태
- 준비 상태 : CPU만 할당 받으면 당장 명령을 실행할 수 있는 상태
- 봉쇄 상태 : CPU를 할당 받아도 당장 명령을 실행할 수 없는 상태
- 현재 명령을 실행 중이여서 입력받은 명령을 실행 할 수 없는 상태
- 이유: 후속 명령이 파일을 다읽어온 결과가 있어야지만 실행 이 될 수 있는 것이면 파일을 읽어오는 동안 CPU는 기다려야한다. 이러한 상황은 CPU를 비효율적으로 사용하게 되므로 봉쇄상태에 들어가서 파일을 다 읽어올때 까지 CPU를 반환하고 봉쇄상태에 돌입한다. 즉, 디스크에 입출력을 요청하고 이 작업이 완료될 때까지 봉쇄상태가 된다.
이렇게 상태를 구별하는 이유는 -> 컴퓨터 자원을 효율적으로 사용하기 위함
- 3가지 외에도 프로세스의 일시적인 상태를 구별하는 명칭도 있다.
- 시작(new, 프로세스가 생성중) : 프로세스를 시작하기 위한 모든 자료구조는 생성되었지만 메모리 승인을 못받은 상태
- 완료(teminated, 프로세스가 종료 중): 프로세스는 종료되었지만, 해당 자료구조를 전부 정리하지 못한 상태
- 문맥교환(context switch) :
- 수행 중이던 프로세스의 문맥을 저장하고 새로운 프로세스 문맥을 셋팅하는 과정
- 발생하는 경우
- 타이머 인터럽트
- 봉쇄상태( 입출력 요청 시스템콜)
- 이때 준비된 프로세스 중에서 하나가 실제로 CPU의 제어권 넘겨받는 과정을 CPU 디스패치(dispatch)라고 한다.
- 디스크에 입출력을 요청한 프로세스
- 디스크 입출력을 기다리는 큐에 줄서서 대기
- 자기 차례에 디스크 컨트롤러로 부터 데이터를 받기 완료
- 디스크 컨트롤러가 CPU에 인터럽트를 발생시켜 입출력 완료사실을 알림
- 인터럽트 처리 루틴 실행
- 입출력 큐에서 빠져나옴
- 봉쇄상태인 프로세스를 준비상태로 바꾼 후
- 로컬버퍼에 있는 내용을 메모리로 이동 시킴 (CPU 기다리는 큐에서 줄서서 대기)
3. 프로세스 제어 블록
프로세스 제어블록(proces control block: PCB)
- 운영체제가 시스템 내의 프로세스들을 관리하기 위해 프로세스마다 가지고 있는 정보들을 담는 커널 내의 자료구조
- 프로세스의 상태 (process state)
- CPU할당 여부 결정하기 위해 필요
- 프로그램 카운터(program counter)의 값
- 다음에 수행할 위치를 지칭
- CPU 레지스터 (CPU register)의 값
- CPU연산을 위해 현시점에 레지스터에 어떤 값을 저장하고 있는지 나타냄
- CPU 스케줄링 정보(CPU scheduling information)
- 프로세스의 스케줄링을 위해 필요한 정보
- 메모리 관리 정보 (memory managemetn information)
- 프로세서에 메모리를 할당을 위해 필요한 정보
- 자원 사용 정보 (accounting infromation)
- 사용자에게 자원 사용 요금을 계산해 청하는 등의 용도
- 입출력 상태 정보 (I/O status information)
- 입출력 상태 정보는 프로세스가 오픈한 파일 정보 등 프로세스의 입출력 관련 상태 정보
4. 문맥교환
문맥교환은 CPU를 점유하는 프로세스가 다른 사용자 프로세스로 변경되는 과정
- 프로세스가 진행될 때 발생하는 인터럽트나 시스템콜로 인해 CPU의 제어권이 운영체제로 넘어가고 잠시 프로세스를 멈추고 운영체제의 커널의 코드가 실행 되는 경우 => 문맥교환 X, 프로세스의 실행모드가 사용자모드에서 커널 모드로 바뀌는 경우다.
5. 프로세스를 스케쥴링하기 위한 큐
준비 큐 (ready queue)
- 운영체제가 준비되어 있는 프로세스들을 줄 세우기 위해 사용되는 큐
- CPU를 기다리는 프로세스를 줄 세우는 큐
- 제일 앞에 있는 프로세스에 제일 먼저 CPU 할당
장치 큐 (device queue)
- 운영체제가 특정 자원을 기다리는 프로세스들을 줄세우기 위해 자원별로 사용되는 큐
- 하드웨어 자원
- 디스크 입출력 서비스 요청 -> 디스크 입출력 큐에서 줄서서 대기
- 키보드 입출력 큐, 등등존재
- 소프트웨어 자원
- 공유 데이터에 대한 접근 권한
- 데이터의 일관성을 위해서 다른 프로세스가 접근하는 것을 차단
- 공유 데이터를 기다리는 큐에서 대기 -> 사용중인 프로세스가 데이터를 반납 -> 다음 차례 프로세서에게 순서대로 데이터의 접근권한을 주는 방법을 사용
- 공유 데이터에 대한 접근 권한
- 하드웨어 자원
작업 큐(job queue)
- 시스템 내의 모든 프로세스를 관리하기 위한 큐
- 모든 프로세스가 작업 큐에 속한다.
- 작업 큐에 있는 프로세스가 반드시 메모리를 가지고 있지는 않음
이와 같이 프로세서의 상태 관리는 커널의 주소 영역 중 데이터 영역에 다양한 큐를 두어 수행한다.
6. 스케쥴러
어떤 프로세스에게 자원을 할당할지 결정하는 운영체제 커널의 코드
- 장기 스케쥴러 (long term scheduler) 혹은 작업 스케쥴러 (job scheduler)
- 어떤 프로세스를 준비 큐에 진입 시킬지 결정하는 역할
- 준비 큐에 대기를 시키게 되므로 메모리를 할당하는 문제에도 관여
- 메모리에 동시에 올라가 있는 프로세스의 수(degree of multirprogramming)를 조절하는 역할
- 현대의 시분할 시스템용 운영체제에서는 사용을 안함
- 과거의 적은 양의 메모리를 효율적으로 사용하기 위해 주로 사용됨
- 대신 중기스케줄러를 두는 경우가 많음
- 단기 스케쥴러 (short term scheduler) 혹은 CPU스케쥴러
- 준비 큐에 대기 중인 프로세스들 중에 어떤 프로세스를 다음 번 실행 상태로 만들 것 인지 결정
- 준비 큐에 대기 중인 프로세스들의 CPU 할당 순서를 결정
- 시분할 시스템에서는 타이머 인터럽트가 발생하면 단기 스케쥴러가 호출된다.
- 중기 스케쥴러 (medium term scheduler)
- 너무 많은 프로세스에게 메모리를 할당해 시스템의 성능이 저하되는 경우를 해결하기 위함
- 프로세스의 수를 동적으로 조절하여 메모리 조절
- 스왑 아웃(swap out) 을 이용하여 메모리를 조절
- 프로세스 중 일부를 선정해 이들로부터 메모리를 통째로 빼앗아 그 내용을 디스크의 스왑영역에 저장
- 0 순위인 프로세스는 봉쇄상태에 있는 프로세스 : 당장 CPU를 획득하지 않으므로 메모리가 필요없음
- 다음 순위는 타이머 인터럽트가 발생해 준비 큐로 이동하는 프로세스
- 스왑 아웃(swap out) 을 이용하여 메모리를 조절
- 중지 상태의 프로세스 등장
- 중기 스케쥴러로 인해 실행, 준비, 봉쇄에서 중지(suspended, stopped) 상태가 추가됨
- 말 그대로 이는 프로세스가 중지된 상태 -> 외부에서 재개시키지 않는 잇항 다시 활성화 X
- 중지 상태로 들어가는 프로세스는 메모리를 통째로 빼앗긴다.
- 세분화..
- 중지 준비 : 준비 상태에 있던 프로세스가 중지
- 중지 봉쇄 : 봉쇄 상태에 있던 프로세스가 중지
- 두 경우도 모두 메모리는 보유하고 있지 않음
7. 프로세스의 생성
부모 프로세스가 자식 프로세스를 생성 -> 자식 프로세스가 죽음 -> 부모 프로세스가 처리 담당
- 부모 프로세스(운영체제가 생성한 프로세스)
- 자식 프로세스(부모 프로세스가 새롭게 생성한 프로세스)
- 자식 프로세스를 생성할 때 자식 프로세스가 부모의 주소공간을 복제
- 생성이 완료된 후에는 독자적인 주소 공간을 이용
- 부모로 부터 생성된 모든 자식 프로세스가 처리되어야 부모 프로세스도 종료
프로세스가 작업을 수행하기 위해 자원을 할당 받는 방식
- 운영체제로 부터 직접 할당
- 부모와 자식이 공존하며 수행
- 부모와 자식이 같이 CPU를 획득이 불가
- 자식 프로세스의 종료를 기다리며 부모 프로세스가 봉쇄상태로 됨
- 독립적인 관계
프로세스의 생성 절차 ( 유닉스 경우 p133)
- 프로세스의 생성
- fork() : 기존 프로세스 와 동일한 프로세스복사, 복사한 시점 부터 실행
- exec() : 새롭게 수행시키려는 프로세스를 새로운 프로그램으로 덮어씌우기, 첫 부분 부터 다시 실행
- 프로세스의 종료
- 자발적 종료 - exit()
- 비발적 종료 - abort()
8. 프로세스간의 협력
원칙: 하나의 프로세스는 다른 프로세스의 수행에 영향을 미칠 수 없다.
- 협력 메커니즘을 이용
- 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있게 한다.
- 효율성 증진을 위함 : 처리 결과 및 정보 공유, 처리속도 향상
- 대표적인 메커니즘
- Inter-Proces Communication(IPC) : 프로세스간의 통신과 동기화를 위한 메커니즘
- 메세지 전달 방법 (커널을 통해서만 가능)
- 프로세스간의 주소공간이 다름 -> 시스템 콜 방식으로 요청
- 커뮤니케이션 링크 생성
- send() 와 revceive() 이용 하여 메세지 전달
- 프로세스간의 주소공간이 다름 -> 시스템 콜 방식으로 요청
- 통신방식
- 메세지전달 방식
- 직접통신 (다른 프로세스간의 통신)
- [프로세스 a] -> [프로세스 b]
- 간접통신 (메일박스라는 일종의 저장공간을 걸쳐서 통신)
- [프로세스 a] -> [메일박스 m] -> [프로세스 b]
- send(m, meesage), m이라는 메일박스에 메세지 전송
- receive(m, message), m이라는 메일박스로 부터 메세지 수신
- [프로세스 a] -> [메일박스 m] -> [프로세스 b]
- 두 방식의 차이는 연산의 인터페이스 차이
- 직접통신 (다른 프로세스간의 통신)
- 공유메모리 방식
- (운영체제가 지원) 공유메모리를 사용하는 시스템 콜 사용
- 프로세스들이 주소공간의 일부를 공유하는 방식
- 각자의 주소영역에 공통적으로 포함되는 영역
- 물리적으로 두 프로세스간에 공통영역을 매핑? 할당?
- <단점> 서로의 데이터간의 일관성문제 유발할 가능성
- 메세지전달 방식
- 메세지 전달 방법 (커널을 통해서만 가능)
- Inter-Proces Communication(IPC) : 프로세스간의 통신과 동기화를 위한 메커니즘
- 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있게 한다.
'책 > 운영체제와 정보기술의 원리' 카테고리의 다른 글
7 장 메모리관리 - 1. 주소 바인딩 (0) | 2023.12.19 |
---|---|
6 장 CPU 스케줄링 (0) | 2023.12.18 |
4장 프로그램의 구조와 실행 (0) | 2023.11.29 |
3 장 컴퓨터 시스템의 동작 원리 (0) | 2023.11.25 |
2장 운영체제 개요 (1) | 2023.11.25 |