티스토리 뷰
프로세스 구조 개요
프로세스(process)는 일반적으로 어떻게 구성되어 있을까?
Text(CODE)
프로그램의 코드
Data
- 변수 / 초기화된 데이터
-
BSS Segment / Data Segement 로 분리된다.
- BSS
- 초기화되지 않은 Global, Static 변수
- Data
- 초기화 된 Global, Static 변수
- BSS
Stack
- 임시 데이터(함수 호출, 로컬변수 등)
Heap
- 코드에서 동적으로 만들어지는 데이터
출처: https://www.drdobbs.com/security/anatomy-of-a-stack-smashing-attack-and-h/240001832?pgno=1
PCB
- Process Control Block(PCB), Process Context Block(PCB) 이라고 함
- 프로세스가 실행중인 상태를 캡쳐/구조화해서 저장한다.
- 저장되어 있는 것들
- PC(Program Counter) + SP(Stack Pointer)을 저장한다.
- Process ID
- Register 값(PC, SP 등)
- Scheduling Info(Process State)
- Memory Info(메모리 사이즈 limit)
프로세스와 컨텍스트 스위칭
- Context Switching (문맥 교환)
- CPU에 실행할 프로세스를 교체하는 기술
- 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서, 메인 메모리에 저장
- 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보(PC, SP)를 CPU의 레지스터에 넣고 실행
- Dispatch(디스패치)
- Ready 상태의 프로세스를 Running 상태로 바꾸는 것
- Dispatch(디스패치)
- 컨텍스트 스위칭 시간은 실제로 굉장히 짧은 시간(ms)단위로, 프로세스 스위칭이 일어난다.
- 컨텍스트 스위칭 시간을 짧게 하기 위해서 C 코드가 아닌 에셈블리어 코드로 작성한다.
- 어셈블리어로 작성했기 때문에, 리눅스의 경우 컨텍스트 스위칭 코드는 각 CPU마다 별도로 존재한다.
레코트판 처럼: https://www.youtube.com/watch?v=vvNqDRLYN64&feature=youtu.be
컴파일러
- 초기 컴퓨터 프로그램들은 어셈블리어로 작성
- 서로 다른 CPU 아키텍처가 등장할 때마다 매번 똑같은 프로그램 작성
- 어셈블리어로는 프로그램 작성 속도가 매우 떨어진다.
- 컴파일러 등장
- CPU 아키텍처에 따라 컴파일러 프로그램을 만들면 된다. 기존 코드는 재작성할 필요가 없다.
- 그러나, 어셈블리어로 작성한 코드보다 속도가 떨어질 수 있다.
패스트캠프 강의를 듣고 정리했습니다.
'개발 > 상식' 카테고리의 다른 글
[운영체제] 7. 프로세스간 커뮤니케이션 (0) | 2019.12.19 |
---|---|
[운영체제] 5. 인터럽트 (0) | 2019.12.19 |
[운영체제] 4. 프로세스 상태와 스케쥴링 (0) | 2019.12.19 |
[운영체제] 3. 프로세스 스케쥴링 알고리즘 (0) | 2019.12.19 |
[운영체제] 2. 프로그램 처리 방법들 (0) | 2019.12.19 |
[운영체제] 1. 운영체제의 큰 그림 (0) | 2019.12.19 |