-
2024 운영체제 정리 - 2. Process & ThreadOperating System 2024. 4. 2. 19:15728x90
2024 운영체제 정리 - 2. Process & Thread
- 1. 운영체제란
- 2. Process & Thread
- 3. IPC
- 4. CPU Scheduling
- 5. Synchronization
- 6. Virtual Memory
Process
- Process란 ?
- 프로그램이 실행되기 위해 memory에 적재되어 CPU에 의해 실행되는 작업의 단위
- 프로세스는 크게 1) Logical Control Flow, 2) Private Address Space라는 특징을 가지고 있다.
- 1) Logical Control Flow
- 마치 CPU를 혼자 쓰는 것처럼 보인다는 특징과
- 2) Private Address Space
- 한 프로세스당 하나의 메모리 영역를 할당 받는 것을 의미한다
- 1) Logical Control Flow
- 위의 특징은 전 포스팅에서 설명한 메모리의 1) 커널 영역과 2) 사용자 영역으로 연결하여 설명할 수 있다
- 1) 커널 영역
- 각 프로세스는 커널 영역에 저장되는 PCB (Process Control Block)이라는 것을 통해, 해당 프로세스에 대한 정보를 저장하고 구분한다
- 2) 사용자 영역
- 각 프로세스는 사용자 영역에서 하나의 메모리 영역을 할당 받는데, 이는 1) 코드 영역, 2) 데이터 영역, 3) 힙 영역, 4) 스택 영역으로 구성되어 있다
- 1) 커널 영역
- PCB (Process Control Block)과 Context Switching
- 운영체제는 한정된 CPU 자원을 나눠서 사용하기 위해 여러 프로세스를 번갈아가면서 실행한다 => "Context Switching"
- 한 번에 하나의 프로세스만 수행된다면, 다른 프로세스들은 그 프로세스가 끝날 때까지 기다려야 하기 때문
- Context Switching는 하나의 프로세스가 실행되는 중에 인터럽트하고 그 정보를 나중에 재개하기 위해 PCB에 저장하고, 다른 프로세스를 실행한다
- 따라서 PCB는 다시 프로세스가 실행될 때 필요한 정보들을 담고 있다 -> 다시 재개할 때 커널 영역에 저장된 이 PCB에 접근한다
- 운영체제는 한정된 CPU 자원을 나눠서 사용하기 위해 여러 프로세스를 번갈아가면서 실행한다 => "Context Switching"
PCB에 저장된 정보들
1. PID
2. CPU 스케줄링 정보(언제, 어떤 순서로 CPU를 할당받을지)
3. 메모리 관리 정보 (프로세스의 저장 위치를 알기 위한 정보들 : 페이지 테이블 정보, 베이스 레지스터, 한계 레지스터 정보 등 ... )
4. 프로세스의 상태
5. 레지스터 값 (프로그램 카운터 등 ... )Program Counter
CPU 내의 레지스터 중 하나로, 기계어로 번역된 명령어를 가리키는 주소를 저장하고 있다.
memory에 적재되어있는 process code영역의 명령어중 다음번 연산에서 읽어야할 명령어의 주소값을 PC register가 순차적으로 가리키게 된다.
(컴퓨터 구조에서 더 자세히 배운다. 이래서 컴퓨터 구조랑 운영체제를 같이 공부해야 된다.)- 프로세스의 메모리 영역
- 위에서 각 프로세스는 사용자 영역에서 하나의 메모리 영역을 할당 받는데, 이는 1) 코드 영역, 2) 데이터 영역, 3) 힙 영역, 4) 스택 영역으로 구성되어 있다고 말했다.
- 1) 코드 영역 : 실행될 명령어 저장
- 2) 데이터 영역 : 전역 변수와 같이 프로그램이 실행되면서 바뀌지 않을 정보들
- 3) 힙 영역 : 사용자가 자유로이 메모리를 할당하고 해제해서 쓸 수 있는 영역 (malloc)
- 4) 스택 영역 : 지역 변수, 매개 변수처럼 임시저장되는 정보 공간
- 위의 코드 영역과 데이터 영역은 1) 정적 할당 영역, 힙 영역과 스택 영역은 2) 동적 할당 영역으로 구분된다
- 힙 영역과 스택 영역의 주소가 겹치지 않도록 각각 메모리의 아래에서 위로, 위에서 아래로 저장한다.
- 위에서 각 프로세스는 사용자 영역에서 하나의 메모리 영역을 할당 받는데, 이는 1) 코드 영역, 2) 데이터 영역, 3) 힙 영역, 4) 스택 영역으로 구성되어 있다고 말했다.
Q. 파이썬에서는 메모리 관리가 어떻게 될까?
C나 JAVA의 경우 malloc을 통해 동적할당을 할 수 있지만 파이썬은 자동으로 동적할당을 해주는 언어이기 때문에 사용자는 신경 쓸 부분이 없다.(python memory manager라는 기능이 heap영역 메모리를 관리해준다고 한다)
현대 프로그램 언어에서 자료는 크게 두 가지로 분류된다.
1) 기본 자료형 : 숫자, 문자열, 불 등 작고 간단한 자료
2) 복합 자료형 : 리스트, 딕셔너리, 객체 등 크고 무거운 자료
파이썬에서는 다음과 같이 숫자, bool, string 자료형은 기본자료형, List나 dictionary, 함수와 같은 것들은 복합자료형에 해당이 된다.
기본 자료형은 크기가 작고 고정되어 있어 상자(스택)에 넣어 차곡차곡 보관하고,
복합 자료형은 크기가 정해져 있지 않은 복잡한 자료로 다른 창고(힙)에 넣고 보관하고 창고 위치를 스택에 보관한다
함수는 복합 자료형이기 때문에 힙(heap)에 저장된다.
함수를 호출할 때마다 스택(stack)이 새로 생성되고, 함수 호출이 완료되면 스택(stack)은 사라진다.
아래의 링크에서 구체적으로 파이썬이 어떻게 실행되는지 확인할 수 있다
https://pythontutor.com/python-compiler.html#mode=edit- 프로세스의 상태
- 해당 내용은 4.CPU Scheduling에서 더 자세히 공부할 것이다
- Multi Process
- 위에서는 하나의 프로세스를 중점적으로 살펴봤다. 그렇다면 이런 프로세스가 한 번에 여러 개 실행될 순 없을까?
- "동시성"과 "병렬성"으로 위를 설명할 수 있다
- 동시성 : 하나의 CPU에서는 하나의 프로세스만 수행할 수 있다. 다만 Context Switching을 통해 빠르게 바뀌면서 마치 하나처럼 수행되는 것처럼 보인다
- 병렬성 : 최근의 컴퓨터는 멀티 코어, 즉 여러 개의 CPU 연산장치를 탑재하고 있기에, 각 CPU당 하나의 프로세스를 실행하게 되면서, Process가 동시에 실행되는 것
- Thread란?
- 하나의 프로세스를 구성하는 여러 실행 흐름의 단위
- Thread도 process처럼 동시에 수행되기 위해서 Context Switching이 일어난다!
- 하나의 프로세스 내에서도 여러 작업을 병렬적으로 수행하기 위해서 multi thread로 나누게 된다
- Thread는 한 프로세스 내에서 Program Counter와 Stack 영역을 제외한 나머지 메모리 영역(code, data, heap)을 공유한다
- 왜 Program Counter와 Stack 영역은 독립적으로 가지냐?
- Program Counter의 경우, 한 프로세스 내에서도 각각의 thread끼리 context switching이 일어나기 때문에, 다음 명령어를 가리키기 위해선 독립적으로 필요한다
- Stack 영역의 경우, 명령어/함수 실행 시의 지역 변수나 매개 변수 전달을 위해서 독립적인 공간이 필요하다
- 왜 Program Counter와 Stack 영역은 독립적으로 가지냐?
- Multi Process와 Multi Thread의 차이
- 위에서 Process도 Thread도 여러 개로 나뉘어 수행될 수 있다고 말했다. 그럼 두 방식은 어떤 상황에서 좋을까?
- Multi Process의 장단점
- 장점
- 프로그램 안정성 : 하나의 프로세스가 죽어도 다른 프로세스에 영향을 주지 않아 안정적임
- 단점
- Context Switching Overhead: Multi process는 Multi thread에 비해서 Context Switching을 할 때 Overhead 발생한다
- CPU는 다음 프로세스의 정보를 불러오기 위해 (System Call을 통해서 Kernel 모드에 접근해서 interrupt 해야 되고 ~) 메모리를 검색하고, CPU 캐시 메모리를 초기화하며, 프로세스 상태를 저장하고, 불러올 데이터를 준비해야 하기 때문에 ㅇㅇ
- 자원 비효율성 : 한 프로세스당 하나의 영역을 가지기 때문에 더 많은 메모리 공간과 CPU 공간을 차지하게 됨
- 프로세스 간 자원을 공유하기 위해선 IPC(Inter Process Communication)를 사용해야 한다 (다음 포스트에서 다룬다)
- Context Switching Overhead: Multi process는 Multi thread에 비해서 Context Switching을 할 때 Overhead 발생한다
- 장점
- Multi Thread의 장단점
- 장점
- 자원 효율성: 한 프로세스 내에서 Thread끼리 (통신없이) 자원을 공유할 수 있어 효율적이다
- Context Switching 비용 감소
- Thread는 스위칭할 때 스레드 간에 공유하는 자원을 제외한 스레드 정보(stack, register)만을 교체하면 되므로 프로세스 컨텍스트 스위칭 비용보다 상대적으로 낮다
- 단점
- 안정성 문제 : 한 Thread가 같은 프로세스 내의 다른 Thread들에게도 영향을 줄 수 있다
- 장점
- Process Context Switching과 Thread Context Switching의 차이
- 1. TCB가 PCB보다 가볍다
- 프로세스 내의 스레드들은 text, data, heap 영역 메모리를 공유하기 때문에 TCB에는 stack 및 간단한 register 포인터 정보만을 저장하기 때문에 PCB보다 TCB가 가벼워 더 빨리 읽고 쓸수 있다
- 2. 캐시메모리 초기화 여부
- 프로세스 컨텍스트 스위칭이 일어날 경우, 다른 프로세스의 실행으로 인해 CPU가 새로운 명령어와 데이터를 로드해야 하기 때문에 CPU 캐시 메모리를 초기화 하여야 한다
- 스레드 컨텍스트 스위칭일 경우, 프로세스 내 스레드 간에 스택과 레지스터 값 등 일부 컨텍스트 정보만 변경되므로 CPU 캐시 메모리는 초기화되지 않는다. 다만 스레드가 다른 CPU 코어에서 실행될 때는 해당 코어의 캐시 메모리에 스레드 컨텍스트 정보가 로드되어야 하므로 초기화될 수 있다.
- 1. TCB가 PCB보다 가볍다
Reference
https://chaerich.tistory.com/17
https://hkim-data.tistory.com/180
728x90'Operating System' 카테고리의 다른 글
2024 운영체제 정리 - 6. 메모리 관리와 Virtual Memory (0) 2024.04.02 2024 운영체제 정리 - 5. Synchronization & Deadlock (0) 2024.04.02 2024 운영체제 정리 - 4. CPU Scheduling (1) 2024.04.02 2024 운영체제 정리 - 3. IPC (0) 2024.04.02 2024 운영체제 정리 - 1. 운영체제란 (0) 2024.04.02