********************************
##이 글은 제가 공부하고 있는 책을 요약해놓은 것이므로 본문 내용만 봐선 이해가 어려울 수 있습니다.
목차
1. 프로세스의 개념
2. 프로세스의 상태
3. 프로세스 제어블록(Process Control Block)
4. 문맥교환
********************************
1. 프로세스의 개념
프로세스: 실행중인 프로그램을 의미.
프로세스는 CPU를 획득해 자신의 코드를 수행하거나, CPU를 반환하고 입출력작업을 수행함.
프로세스 문맥이란 프로세스가 현재 어떤 상태에서 수행되고 있는지 알기위해 필요한 정보를 의미. 시분할 시스템 환경에서는 CPU를 계속 가지고 있는 것이 아니고 빼앗겼다가 다시 획득하는식이기 때문에 직전 수행 시점의 정확한 상태를 재현할 필요가 있다. 이때 필요한 것이 프로세스 문맥. 프로세스 문맥은 그 프로세스의 주소 공간, 레지스터에 어떤 값을 가지고 있었는지, 커널에서 수행한 일의 상태, 커널이 관리하고 있는 각종 정보를 포함.
프로세스 문맥 3가지
하드웨어 문맥- CPU의 수행 상태를 나타냄. 프로그램 카운터값과 각종 레지스터에 저장하고 있는 값을 의미.
프로세스 주조 공간 - 코드, 데이터, 스택으로 이루어진 독자적인 주소 공간
커널상의 문맥 - 운영체제는 프로세스를 관리하기 위해 자료구조를 유지함. PCB와 커널 스택이 이에 해당.
2. 프로세스의 상태
3가지 프로세스 상태: 실행, 준비, 봉쇄
실행 상태 - 프로세스가 CPU를 보유하고 기계어 명령을 실행하고 있는 상태
준비 상태 - 프로세스가 CPU만 보유하면 당장 명령을 실행할 수 있지만 CPU를 할당받지 못한 상태
봉쇄 상태 - CPU를 할당받더라도 당장 명령을 실행할 수 없는 상태(예로는 프로세스가 요청한 입출력작업이 진행중인 경우)
프로세스를 구분하는 이유: 컴퓨터 자원의 효율적 관리
프로세스가 생성 중이거나 종료 중인 일시적 상태를 각각 시작 상태, 완료 상태라고 부른다.
시작 상태 - 프로세스가 시작되어 그 프로세스를 위한 각종 자료구조는 생성되었지만 메모리 획득을 승인받지 못한 상태
완료 상태 - 프로세스가 종료되었으나 운영체제가 그 프로세스와 관련된 자료구조를 완전히 정리하지 못한 상태
문맥교환(context switch): 실행시킬 프로세스를 변경하기 위해 원래 수행 중이던 프로세스의 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정. 문맥교환은 타이머 인터럽트가 발생하는 경우 및 실행 상태에 있던 프로세스가 입출력 요청 등으로 봉쇄 상태로 바뀌는 경우가 있음. 이때 준비상태에 있는 프로세스들 중에서 CPU를 할당받을 프로세스를 선택한 후 실제로 CPU의 제어권을 넘겨받는 과정을 CPU 디스패치라고 한다.
<입출력을 요청한 프로세스의 상태변화 예시>
실행 상태의 프로세스가 디스크에서 파일의 내용을 읽어오는 작업 실행 - 디스크에서 읽는 작업은 CPU 처리 속도에 비해 상대적으로 오랜 시간이 소요되기 때문에 완료가 될때까지 CPU를 반환한 다음 디스크 입출력 서비스를 기다리며 봉쇄상태로 바뀌게 됨- CPU스케줄러가 준비상태의 프로세스들 중에서 적절히 하나를 택해 CPU 할당 - 선택된 프로세스는 실행상태가 됨 - 한편 입출력을 요청한 프로세스는 디스크 입출력을 기다리는 큐에 서있다가 차례가 되면 디스크 컨트롤러로부터 서비스를 받고나면 디스크 컨트롤러가 CPU에게 인터럽트 발생 - CPU가 해당 인터럽트에 대한 루틴을 수행하는 동안 CPU에서 실행되던 프로세스의 상태는 사용자모드에서 커널모드로 변경됨. 즉, 처리루틴과 관련이 없더라도 편의상 직전 프로세스의 문맥에서 실행된 것으로 간주하여 인터럽트를 당한 프로세스가 커널모드로 진입한 것으로 간주 - 디스크 컨트롤러가 발생시킨 인터럽트는 입출력이 완료된 프로세스의 상태를 봉쇄상태에서 준비상태로 바꿈.
3. 프로세스 제어블록(Process Control Block)
프로세스마다 유지하는 정보들을 담는 커널 내의 자료구조.
<PCB 요소>
프로세스의 상태: CPU를 할당해도 되는지 여부를 결정하기 위해 필요
프로그램 카운터 값: 다음에 수행할 명령의 위치
CPU 레지스터 값: CPU 연산을 위해 레지스터에 어떤 값을 저장하고 있는지
CPU 스케줄링 정보: CPU 스케줄링을 위해 필요한 정보
메모리 관리 정보: 메모리 할당을 위해 필요한 정보
자원 사용 정보: 사용자에게 자원 사용 요금을 계산해 청구하는 등의 용도
입출력 상태 정보: 프로세스가 오픈한 파일 정보 등 프로세스의 입출력 관련 상태 정보
4. 문맥교환
사용자 프로세스로부터 다른 사용자 프로세스로 CPU의 제어권이 이양되는 과정
원래 수행 중이던 프로세스는 준비상태, 새롭게 CPU를 할당받은 프로세스는 실행상태가 된다.
문맥교환은 타이머 인터럽트가 발생하는 경우 및 실행 상태에 있던 프로세스가 입출력 요청 등으로 봉쇄 상태로 바뀌는 경우가 있음.
프로세스가 실행 상태일 때 시스템 콜이나 인터럽트가 발생하면 CPU의 제어권이 운영체제로 넘어와 커널의 코드가 실행됨. 이 경우에도 CPU의 실행 위치등 프로세스 문맥 중 일부를 PCB에 저장하게 되지만 이를 문맥교환이라고 하지 않음. 프로세스의 실행모드만 사용자모드에서 커널모드로 바뀌는 것일 뿐, CPU를 점유하는 프로세스가 다른 사용자 프로세스로 변경되는 과정이 아니기 때문.
문맥교환에 소요되는 시간은 일종의 오버헤드라서 타이머에 CPU 할당시간을 아주 작게 해 문맥교환이 빈번히 발생하게 하면 오버헤드가 커짐. 따라서 적당한 CPU 할당시간을 정하는 것이 중요.
댓글