OS를 논의할 때 모든 CPU 활동
을 어떻게 지칭해야 하는지
가 항상 문제가 된다.
- 초창기 컴퓨터 ⇒ 작업(job)을 실행하는 일괄처리 시스템
- 시분할 시스템 ⇒ 사용자 프로그램 또는 태스크(task)를 실행하는 시스템
- 단일 사용자 시스템 ⇒ 워드 프로세서, 웹 브라우저와 같은 여러 프로그램을 한 번에 실행할 수 있다.
- 임베디드 장치 ⇒ 멀티 태스킹을 지원하지 않아서 한 번에 하나의 프로그램만 실행할 수 있다.
여러 측면에서 이러한 모든 활동들은 유사하므로 이러한 모든 활동을 프로세스(process)
라고 한다.
대부분은 프로세스
라는 용어도 사용할 것이지만 작업(job)
이라는 단어가 사용될 때 많은 OS 이론 및 용어가 개발되었기 때문에 적절한 경우에는 작업(job)
이라는 단어를 사용할 것이다.
1. 프로세스
비공식적으로 프로세스
란 실행 중인 프로그램
이다. 프로세스의 현재 활동 상태는 프로그램 카운터(Program Counter, PC)
값과 프로세서 레지스터의 내용으로 나타낸다.
- 프로세스의 메모리 배치
1) 스택(stack) : 함수를 호출할 때 사용하는 임시 데이터 저장장소 (ex. 함수 매개변수, return 주소, 지역 변수 ⇒ 이 정보들을 모두 갖고 있는 걸 활성화 레코드(activation record)라고 다)
2) 힙(heap) : 프로그램 실행 중에 동적으로 할당되는 메모리
3) 데이터(data) : 전역 변수
4) 텍스트(text) : 실행 코드
3), 4)은 크기가 고정
되어 있기 때문에 프로그램 실행 시간(runtime) 동안 크기가 변하지 않는다.
1), 2)는 프로그램 실행 중에 동적으로 줄거나 커질 수
있다.
1)은 함수가 호출될 때 마다 활성화 레코드
가 스택에 저장되고 함수 동작이 완료되면 스택에서 삭제된다.
2)는 메모리가 동적으로 할당됨에 따라 힙
에 저장되는 데이터가 늘어나
고 동적 할당이 해제되면 힙에 저장된 데이터가 줄어든
다.
그리고 1)과 2)는 서로의 방향으로 커지더라도 OS는 절대 이 두 영역이 겹치도록 하면 안 된다.
실행 파일이 메모리에 적재(load)될 때 프로그램은 프로세스
가 된다.
또한, 각각의 프로세스들이 동일한 프로그램과 연관
될 수 있지만, 각 프로세스들은 별도로 실행
하는 걸로 간주된다.
이에 대해서는 3.4에서 자세하게 다룬다.
2. 프로세스 상태
프로세스의 상태는 그 프로세스의 현재 활동
에 따라서 정의된다.
- New : 프로세스 생성 중
- Running : 명령어들이 실행되고 있음
- Waitiing : 프로세스가 어떤 이벤트가 일어나길 대기
- Ready : 프로세스가 processor(처리기)에 할당되기를 대기
- Terminated : 프로세스 실행 종료
OS에 따라서 명칭을 다르게 표현할 수는 있겠지만 대체적으로 이러한 상태들을 모든 시스템에서 찾아볼 수 있다.
하나의 processor 코어
가 한 번에 하나의 프로세스만 실행된다
는 것을 알고 있어야 한다. 그리고 여러 개의 프로세스가 Ready 또는
Waiting 상태에 있을 수 있다.
3. 프로세스 제어 블록 (Process Control Block, PCB)
각각의 프로세스
는 OS에서 PCB
에 의해 표현된다. 아래 그림은 PCB를 나타내는 그림이다.
PCB는 특정 프로세스와 연관된 여러가지 정보를 갖고 있다.
- process state : 2절에서 다룬 프로세스 상태를 저장한다.
- process counter : 이 프로세스가 다음에 실행할 명령어의 주소를 가리킨다.
- CPU registers : 컴퓨터의 구조에 따라 CPU 레지스터는 다양한 수와 유형을 갖는다. accumulator, 인덱스 레지스터, 스택 레지스터, 범용 레지스터, 상태 코드(condition code) 정보가 포함된다. 이후에 프로세스가 다시 스케줄 될 때 지속적으로 올바르게 실행하기 위해서 인터럽트 발생 시 저장되어야 한다.
- CPU 스케쥴링 정보 : 프로세스 우선순위, 스케줄 큐에 대한 포인터와 다른 스케줄 매개변수를 포함 (5장에서 자세히 다룸)
- 메모리 관련 정보 : OS가 사용하는 메모리 시스템에 따라 base 레지스터, limit 레지스터의 값, 페이지 테이블 등과 같은 정보를 포함한다. (9장 참조)
- accounting 정보 : CPU 사용 시간과 경과된 실시간, 시간 제한, 계정 번호, job 또는 process 번호 등을 포함한다.
- 입출력 상태 정보 : 이 프로세스에 할당된 입출력 장치들과 열린 파일(open file)의 목록 등을 포함한다.
요약하면, PCB는 어느 정도의 accounting 정보와 함께 프로세스를 시작
시키거나 재시작할 때 필요한 모든 데이터를 위한 저장소
역할을 한다.
4. 쓰레드 (Thread)
지금까지 논의한 프로세스 모델은 단일 쓰레드
를 실행하는 프로그램에 대해서 다뤘다.
예를 들면, 하나의 쓰레드
가 Word 프로그램을 실행
하고 있다면 실행되는 명령어의 단일 쓰레드가 존재한다.
이 단일 제어 쓰레드는 프로세스가 한 번에 단 한 가지 일만 실행하도록 허용한다. 때문에 문자를 입력하면서 오타 검사를 동시에 실행할 수 없다.
현대 OS는 프로세스의 개념을 확장해서 하나의 프로세스
가 다수의 쓰레드를 실행
할 수 있도록 허용했다.
즉, 문자를 입력하면서 오타 검사를 동시에 실행할 수 있다.
이와 관련된 내용은 4장에서 자세히 살펴보자.
'OS Concepts 10th' 카테고리의 다른 글
[OS] 3-3. 프로세스에 대한 연산 (0) | 2023.09.06 |
---|---|
[OS] 3-2. 프로세스 스케쥴링 (0) | 2023.09.05 |
[OS] Chapter 3. Process (0) | 2023.09.03 |
[OS] 2-8. OS 구조 (0) | 2023.09.02 |
[OS] 2-5. 링커와 로더(Linker and Loader) (0) | 2023.09.02 |