반응형
프로세스 정의
- 프로세스 : 실행 중인 프로그램. 어떤 프로그램이 임의 시점에서 실행되고 있다면 그를 프로세스라고 한다. 프로그램은 저장장치(하드디스크)에 존재한다. 프로그램이 CPU가 이를 다룰 수 있도록 메인 메모리에 탑재되면 프로세스가 된다. 이들은 시스템 콜을 통해서 커널의 통제하에 시스템의 자원을 경쟁하는 주체들이다.
- 시분할 시스템에서는 임의의 시점에 여러 프로세스가 동시에 수행하는 경우도 있다. 이를 멀티태스킹(혹은 멀티 프로세싱, 태스킹과 프로세싱은 같은 용어라고 봐도 무방)이라고 한다.
- 프로세스는 그 주체에 따라 두가지로 나뉜다. 응용 프로그램이 실행되면 이는 사용자 프로세스라고 하고, 운영체제가 필요에 의해 생성하는 프로세스는 시스템 프로세스라고 한다.
문맥과 문맥교환
- 프로세스의 문맥(context) : 시분할 환경에서 프로세스는 수행 중 계속해서 중단과 속개를 반복한다. 프로세스는 이처럼 상태를 변화가 있는 동적인 개체이다. 이 때 프로세스 중단시에는 보존되고 속개 시 다시 복구되어야하는 프로세스의 모든 실행정보를 문맥이라고 한다.
- 문맥은 메인 메모리의 현재 상태를 의미하는 사용자 수준 문맥 / 커널이 관리하는 내용을 의미하는 커널 수준 문맥으로 나뉜다.
- 사용자 수준 문맥 : (모든 각 프로세스가 가상 메모리 기법에 의하여 전체 메모리공간을 사용할 수 있다고 간주하자. 이에 대해서 자세히는 추후 알아볼 것이니 그냥 그렇게 가정하자.) 메모리 제일 아래 영역엔 text 영역이 있다. 여기엔 컴파일된 기계어 프로그램 코드가 존재한다. 그 위에는 광역변수가 들어가는 영역이 두 개 있다. 먼저 존재하는 data 영역은 프로그램 개발시 광역 변수로 선언된 초기값이 지정된 변수가 저장된다. 그 위의 bss(Block Started by Symbol)에는 초기화되지 않은 광역변수가 들어간다. 해당 공간에서는 변수명과 타입(크기)만 기억했다가 프로세스가 준비될 때 그 크기만큼의 메모리가 마련된다. 또 그 위에 존재하는 heap 영역은 프로그램에서 메모리를 동적으로 할당(malloc, free 등)할 때 사용되는 공간이다. 맨 위에 존재하는 stack 영역에서는 프로그램 내의 함수가 호출될 때 call stack 자료가 push되고, 그 함수에서 리턴될 때 자료가 pop된다. 대표적으로 지역변수가 이렇게 다뤄진다. 참고로 heap은 아래에서 위로, stack은 위에서 아래로 운영된다. 이러한 모든 정보를 사용자 수준 문맥이라고 한다.
- 커널 수준 문맥 : 보통 CPU는 명령어를 읽어와서(Fetch), 이를 해독하고 (Decode), 그에 맞는 회로적 기능을 수행하는 (Excute) 세가지 과정을 반복적으로 수행한다. PC는 다음으로 Fetch할 명령어의 주소를 담고 있다. 상태 레지스터인 PSR(Program Status Resister)는 Decode 시 그 결과로 변화되는 여러 상태가 기록되는 공간이다. SP(Stack Pointer)는 사용자 수준 문맥에 해당되는 stack 공간에서 top에 해당되는 부분의 주소를 뜻한다. 이 셋을 특수 레지스터라고 한다. (cf. 이들은 프로세스가 중단될 때 PCB라는 특수한 자료구조에 저장된다.) 그 외에 다른 레지스터는 범용 레지스터인데, 특수 레지스터들과는 달리 사칙연산, 논리 연산에서 사용되는 계산 목적의 레지스터이다. 커널 수준 문맥에는 이러한 특수 레지스터내용과 범용 레지스터 내용, 그리고 프로세스의 현재 자원 사용정보, 커널의 프로세스 관리정보 모두가 포함된다.
- 문맥 교환 : 프로세스들은 문맥을 보존하면서 서로 번갈아 수행한다. 이 때 일어나는 작업이 문맥 교환이다. 문맥교환은 CPU를 다른 프로세스로 넘기는 작업이다. 실행이 정지되는 프로세스의 문맥은 보존되고, 새로 실행되는 프로세스의 문맥이 활성화된다. 사용자 수준 문맥은 메모리에 그냥 남아있고, 커널 수준 문맥은 추후의 복구를 위해 PCB에 저장되었다가 속개시 원복된다. 이 때 프로세스의 자원 사용정보나 커널의 프로레스 관리 정보는 원래 PCB에 저장되어 있어 그대로 두면 된다.
- 문맥 교환의 시점 : 문맥 교환의 시점은 타임슬라이스의 소진에 따른 스케쥴링으로 다른 프로세스에게 선정되거나 인터럽트로 CPU가 선점 당했을 때, (비자발적 문맥교환) / 프로세스 스스로 입출력을 요청하거나 프로세스 스스로 다른 프로세스가 보낼 시그널에 대한 대기 요청으로 CPU를 반납할 때 (자발적 문맥교환)이다. (당장은 이해가 잘 안될 수 있지만 추후 더 자세히 알아볼 것이다.)
반응형
'💻 CS > 운영체제' 카테고리의 다른 글
[운영체제] 프로세스의 생성과 종료 (0) | 2020.04.04 |
---|---|
[운영체제] 상태천이 / PCB / 시스템 호출, 인터럽트, 문맥교환의 연계 (0) | 2020.04.02 |
[운영체제] 보호 / 캐시 / 부트스트래핑 / 커널의 종류 (0) | 2020.03.28 |
[운영체제] 입출력시스템 (0) | 2020.03.26 |
[운영체제] 커널과 시스템호출 (0) | 2020.03.26 |