티스토리 뷰

1. 프로세스란

현대 컴퓨터는 다수의 프로그램이 적재되어 병행 실행되도록 한다.


프로세스란 실행중인 프로그램을 말한다. (job이라고도 불림) 프로세스는 시분할 시스템에서 작업의 단위이다.


프로세스는 함수 매개변수, 복귀 주소, 로컬 변수 등 임시적인 자료를 가지는 프로세스 스택, 전역 변수를 저장하는 데이터 섹션, 동적 할당 메로리를 위한 힙 등으로 구성된다.


프로그램 자체는 명령어 리스트로 디스크에 저장된 파일로 수동적인 존재(passive entity)이며, 프로세스가 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련된 자원의 집합을 가지는 능동적인 존재(active entity)이다. 즉, 실행 파일이 메모리에 적재될 때 프로그램은 프로세스가 된다.


2. 프로세스 상태

프로세스는 다음 상태 중 하나를 가진다.

      • new: 프로세스가 생성 중이다.

      • running: 명령어들이 실행되고 있다.

      • waiting: 프로세스가 어떤 사건(입출력 완료 또는 신호의 수신 등)이 일어나기를 기다린다.

      • ready: 프로세스가 처리기에 할당되기를 기다린다.

      • terminated: 프로세스가 실행을 종료하였다.

운영체제마다 이름은 다를 수 있지만 모든 운영체제의 프로세스가 이 상태를 가지고 있다. 아래 그림 1은 프로세스의 state diagram이다.


process state diagram[그림 1] process state diagram


3. 프로세스 제어 블록(PCB: Process Control Block)

각 프로세스는 운영체제에서 프로세스 제어 블록으로 표현된다. Process Control Block을 줄여 PCB라고 부른다. 다른 말로 테스크 제어 블록이라고도 한다.


다음은 PCB가 포함하는 것들이다.

      • Process state: 위에서 설명한 프로세스 상태를 가진다. (new, running, waiting, ready, terminated, halted 등)

      • Program counter: 프로세스가 다음에 실행할 명령어의 주소를 가진다.

      • CPU registeres: 컴퓨터 구조에 따라 다양한 개수와 타입을 가진다. accumlator, index register, stack register, general-purpose register와 condition code가 포함된다. condition code는 인터럽트 발생 시 program counter와 함께 저장되어야 한다. 인터럽트 처리 후 프로세스가 중단된 지점으로 돌아와 실행할 수 있도록 한다.

      • CPU scheduling information: 프로세스 우선순위, 스케쥴 큐에 대한 포인터와 다른 스케쥴 매개변수들을 포함한다

      • Memory management information: 운영체제가 사용하는 메모리 시스템에 따라 페이지 테이블, 메모리 한계, 세그먼트 테이블 등의 정보를 포함한다.

      • Accounting information: 프로세스 실행을 위해 CPU가 사용된 양과 시간, time limits, execution ID, process number 등을 포함한다.

      • IO status information: 프로세스에게 할당된 I/O 장치들의 리스트와 열린 파일의 리스트를 포함한다.

위와같이 PCB는 프로세스별로 달라지는 모든 정보의 자료구조이다.


* Linux의 PCB

Linux의 PCB는 <linux/sched.h> 안의 sturct task_struct로 정의 되어있다. task_struct는 커널이 프로세스를 관리하는데 모든 정보를 가지고 있다. 예를들면 프로세스의 상태, 스케줄링과 메모리 관리 정보, 오픈된 파일 정보, 부모 프로세스와 자식 프로세스를 가리키는 포인터 등을 가지고 있다.

Linux 커널 안에서 모든 활성 프로세스는 task_struct의 이중 연결 리스트로 표현되고 커널은 현재 실행 중인 프로세스의 포인터를 가지고 있다.(current) 예를 들어 현재 실행 중인 프로세스의 상태를 바꾸려 한다면 아래와 같이 하면 된다.

current->state = new_state;


4. 스레드란

스레드는 스케쥴러에 의해서 독립적으로 관리되는 가장작은 단위이다. 운영체제마다 다르지만 대부분의 경우 스레드는 프로세스의 일부분이다. 

지금까지는 프로세스 당 스레드 하나로 생각해 프로세스가 한 번에 한가지 일만 할 수 있다고 생각했다. 그렇지만 많은 현대의 운영체제는 프로세스개념을 확장하여 여러개의 스레드를 가질 수 있도록 한다. 따라서 프로세스는 한 번에 여러가지 일을 할 수 있게된다. 스레드를 지원하는 시스템에서 PCB는 각 스레드에 관한 정보를 포함하도록 확장된다. 


스레드에 관한 자세한 내용과 프로세스 스케줄링은 다음에 알아본다.

'프로그래밍 > OS' 카테고리의 다른 글

Multi Thread Programming  (2) 2018.01.29
프로세스 스케줄링(2)  (0) 2018.01.28
프로세스 스케줄링  (0) 2018.01.26
OS가 하는일 및 컴퓨터구조  (0) 2017.01.12
OS를 시작하며  (0) 2017.01.12
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함