프로그램을 작성하다보면 실제 실행파일의 구조를 이해해야하는 경우가 많다. (깊게 디버깅을 해야하는 경우)
이런 경우를 위해서라도 프로세스 구조를 알아야할 필요가 있다.
프로세스의 구조
- TEXT(CODE): 컴파일된 코드가 들어가는 부분
- DATA: 변수/초기화된 데이터
- STACK(스택 프레임): 임시 데이터(함수 호출, 로컬 변수 등)
- HEAP: 코드에서 동적으로 만들어지는 데이터
아래의 코드를 예시로 프로세스 구조를 그려보면 이와 같다.(단, 프로그램에서 파이썬 코드를 예시로 들었지만 C언어처럼 컴파일 된다고 가정하게 보기!)
HEAP
여기서 HEAP이 코드에서 동적으로 만들어지는 메모리인데, 어떻게 만들어지고, 사용되는지 알아보자,
C언어에는 malloc이라는 메서드가 있다. 이 메서드로 명시한 메모리 공간만큼 동적으로 메모리 생성이 가능한데, 이 때 바로 HEAP이라는 메모리 공간에 해당 크기만큼 할당된다.
DATA
프로세스 구조 중 DATA에 해당하는 부분도 좀 더 구체적으로는 BSS와 DATA로 구분할 수 있다.
BSS는 초기화 되지 않은 전역변수가 들어가는 곳이고, DATA는 초기값이 있는 전역변수가 있는 곳이다.
프로세스와 컨텍스트 스위칭
컨텍스트 스위칭(Context Switching)이란 CPU에 실행할 프로세스를 교체하는 기술이다.
컴퓨터 구조에서 주요 register 중에
- PC(Program Counter)
- SP(Stack Pointer): 함수가 실행 될 때 스택 프레임에서 최상단 주소를 가리킴
가 있다. 이 주요 register들이 프로세스 구조(TEXT(CODE), STACK, HEAP, DATA(BSS, DATA))와 연관되어서 동작이 되는지 살펴보도록 하자.
Process A와 Process B가 컨텍스트 스위칭 되면서 실행된다고 할 때 A가 실행되다가 (즉, PC, SP가 A의 주소를 가리킴) B로 컨텍스트 스위칭이 일어나려고하면, PCB라는 곳에 A의 PC, SP를 저장해둔다.
PCB(Process Control Block, Process Context Block)이란,
여러 process의 주요 상태( process ID, Register값(PC, SP), Scheduling Info, Memory Info.. 등)가 있는데, PCB는 프로셋스가 실행 중인상태를 캡쳐/구조화해서 저장한다. 그리고 이것이 컨텍스트 스위칭의 핵심이다.
즉, PCB가 processs의 상태 정보를 관리하고, 이를 컨텍스트 스위칭, 스케쥴링 등에 사용하는 것이다.
그래서 컨텍스트 스위칭이 일어나는 순서는 아래와 같다.
'Computer Science > Operating System' 카테고리의 다른 글
[운영체제] Semaphore와 deadlock, starvation (0) | 2021.02.16 |
---|---|
[운영체제] Thread (0) | 2021.02.09 |
[운영체제] Interrupt (0) | 2021.02.09 |
[운영체제] 선점형/비선점형 스케쥴러 (0) | 2021.02.06 |
[운영체제] 프로세스 스케쥴링 - 배치 처리 시스템, 시분할 시스템, 멀티 태스킹 (0) | 2021.02.06 |