본문 바로가기

Programming/UNIX_linux

운영체제의 구조 ( 프로세스 )

프로세스의 의미는 메모리에 로드되어 실행 중인 프로그램을 말한다. 프로그램이 실행 가능 하려면 CPU가 인식할 수 있는 기계어로 구성되어 디스크에 저장되어야 한다. 이 상황에서 프로그램에 대해 실행 요청이 오면 바이너리 코드는 비로소 메인 메모리에 적재되고 실행 가능한 상태가 되는데, 이와 같은 상태의 프로그램을 가르켜 프로세스 라고 한다. 이런 프로세스는 Task 라고 불리기도 한다.

<프로세스의 생성과 종료>

UNIX 시스템에서 임의의 프로그램이 실행되려면 하나의 프로세스(부모) 가 또 다른 프로세스(자식)를 추가로 생성한 다음, 자식 프로세스를 해당 실행 파일과 연관 지음으로써 원하는 프로그램이 실행된다. 즉 , 임의의 프로그램을 실행하라는 명령을 입력받은 프로세스는 자신과 동일한 일을 할 자식 프로세스를 생성하고 이렇게 생성된 프로세스를 디스크에 저장된 해당 실행파일로 변경시킨다.
명령 -> 쉘 (부모) -> 쉘 (자식) -> 자식 쉘이 ls프로그램으로 변경 -> 실행   ( 대충 이런 느낌..)

멀티테스킹이 되는 UNIX에서는 복수의 프로세스가 존재할 수 있기 때문에 PID( process ID )라는 식별자를 이용한다.
PID는 정수형 0부터 차례대로 프로세스가 하나씩 번호를 가진다. ( 부팅 시 생성되는 프로세스가 PID 0 )
0번  PID 프로세스를 제외한 모든 프로세스들은 부모 프로세스를 가지고 자신이 종료할 때 부모 프로세스에게 자신의 종료를 알리고 종료된다. 만약 종료를 부모에게 알리지 못하고 종료된다면 그 프로세스는 Zombie 프로세스 상태가 된다.


<프로세스의 상태 전이>

멜티태스킹을 하는 UNIX 시스템에서 제한된 자원을 효율적으로 사용해야 한다. 보통 CPU 개수보다 프로세스의 수가 더 많기 때문에 자원의 분배를 효율적으로 해야한다. 여러 프로세스중 CPU 를 할당받은 것만 실행상태로 될 수 있으며 나머지 프로세스들은 대기를 해야한다. 프로세스의 상태는 ( 생성 , 활동 , 대기 , 중지 ) 라는 4가지 상태가 있으며 작업을 처리하는 과정에서 상태가 유기적으로 변한다. 프로세스가 생성되면 준비상태가 되며 스케줄링 정책에 따라 CPU를 할당받은 프로세스는 실행 상태로 전이되며 이 과정을 DIspatch 라고 한다. 실행 상태에서 타임아웃이 되면 준비 상태로 전이되며 이 과정을 Time Runout 이라고 한다.
만약 실행상태인 프로세스가 특정 이벤트를 위해 기다릴 필요가 있다면 대기 상태로 전이된다. 이때 다른 프로세스가 실행상태가 될 수 있으므로 효율적이다. 이벤트가 완료되면 대기 상태의 프로세스는 다시 준비 상태가 되는데 이것을 Wake up 이라고 한다.
UNIX 시스템은 준비 실행 대기 상태를 반복하다 최종적으로 좀비 프로세스가 되어 소멸된다.

< 컨텍스트 ( Context ) >

운영체제는 프로세스 생성시 프로세스 정보를 관리하기 위해 자료구조를 커널 영역에 저장한다. 이 자료구조를 UNIX에서는 Context 라고 한다.

< 컨텍스트 스위칭 >

현제 실행중인 프로세스에 할당된 CPU 사용권을 다른 프로세스에게로 항당 하려면 현제 실행중인 프로세스의 실행 정보를 저장하고 다음으로 실행할 프로세스의 실행 정보를 가져오는 과정이 필요하다. 이러한 과정을 컨텍스트 스위칭 이라고 한다.


'Programming > UNIX_linux' 카테고리의 다른 글

운영체제의 구조 ( 스케줄링 )  (0) 2009.08.14
운영체제의 구조 ( 파일 시스템 )  (0) 2009.08.14
UNIX 의 구성  (0) 2009.08.14
UNIX 운영체제  (0) 2009.08.14
VI 편집기 명령어 정리  (0) 2009.08.13