프로그램, 프로세스, 프로세스 주소공간, 스레드
2024. 1. 17. 10:27ㆍCS/운영체제
프로그램
- 코드를 컴파일한뒤, 하드디스크에 저장한 것
프로세스
- 실행파일(프로그램)이 RAM메모리에 적재되어 cpu를 할당받아 실행하는 것으로, 즉 실행중인 프로그램을 의미한다.
- 운영체제로부터 자원을 할당받는 작업의 단위
프로세스 주소공간
- code
- 실행한 프로그램의 코드가 저장되는 영역으로, Read-Only영역으로 되어있다.
- 컴파일시에 결정된다.
- data
- 전역변수, static변수가 저장되는 메모리 영역
- 컴파일시에 결정된다.
- 초기화된 데이터는 data영역에 저장이 되고, 초기화되지 않은 데이터는 bss(Block Stated Symbol)영역에 저장이 된다.
- 실행도중에 변경될 수 있기때문에 Read-Write로 지정되어있다.
- stack
- 전역변수, 매개변수가 저장되는 메모리 영역
- 높은 주소 -> 낮은 주소로 할당된다.
- 컴파일 시에 크기가 결정된다.
- heap
- 런타임중에 크기가 결정되는 메모리 영역
- 낮은 주소 -> 높은 주소로 할당된다.
- code, data는 정적할당영역 / stack, heap은 동적할당영역
스레드
- 프로세스 안에서 실행되는 흐름의 단위로, stack영역을 제외한 나머지 영역을 공유하게 된다.
- stack을 스레드마다 독립적으로 할당하는 이유?
- stack은 함수 호출시, 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간을 의미한다.
- stack메모리 공간이 독립적이라는 것은, 독립적인 함수 호출이 가능하다는 것이고, 이것은 곧 독립적인 실행흐름을 추가되는 것을 의미한다.
- 따라서, 스레드의 정의에 따라 독립적인 실행흐름을 추가하기 위해서 최소 조건으로 독립된 stack을 할당한다.
- 장점
- 시스템의 처리량이 향상된다.
- 단점
- 여러개의 스레드를 이용하는 프로그램을 작성하는 경우에는 critical section을 잘 관리하여 여러 스레드가 함꼐 공유 자원을 이용하는데 오류가 없도록 해야한다.
스레드를 사용하는 이유?
- 멀티프로세스로 실행되는 작업을 멀티 스레드로 실행하게 되면, 프로세스를 생성하여 자원할당하는 과정도 줄어들고
- 멀티프로세스로 context-switching하는 것보다 멀티스레드로 context-switching하는 것이 오버헤드를 더 줄일 수 있다.
- 구글 docs를 이용하여 문서를 작성하는 경우
- 하나의 구글 docs를 프로세스라고 생각하고 문서에 참여하는 사용자를 스레드라고 해보자.
- 만약 멀티프로세스라고 하면, 사용자 한명당 하나의 구글 docs를 켜서 자신이 해야하는 임무를 마무리 하고 도출된 결과를 합쳐야할 것이고
- 멀티스레드라고하면, 하나의 구글 docs에서 여러 사람들이 분배받은 커서를 이용하여 자신의 임무를 마무리하면 된다.
- 참조블로그
'CS > 운영체제' 카테고리의 다른 글
프로세스 수행 상태 변화과정, 중기 스케줄러(=Swapper) (0) | 2024.01.17 |
---|---|
PCB(프로세스 제어 블록), multi process? (0) | 2024.01.17 |
좀비프로세스와 고아프로세스 (0) | 2024.01.15 |
프로세스 관리 (0) | 2024.01.15 |
동기식 I/O와 비동기식 I/O의 공통점과 차이점 (1) | 2024.01.11 |