도도한 개발자
프로세스와 스레드 본문
프로세스(Process)
프로세스는 CPU에 의해 실행되고 있는 프로그램을 뜻합니다.
보조기억 장치에 저장되어 있는 프로그램(ex. 카카오톡, 엑셀, 브라우저 등)을 실행하면 메모리 위에 올라가고 이를 운영체제가 중재하는 역할을 합니다.
실제로 프로그램 자체는 코드(명령어)로 이루어져 있습니다. 그리고 코드를 바탕으로 해서 프로그램을 실행시킨다는 것은 프로세스가 생성되는 것을 의미합니다.
그 프로세스는 프로그램 실행 정보, 프로그래머가 짠 코드 그리고 실행되면서 쓰이는 데이터들로 구성되어 있죠.
하나의 프로세스는 다중 프로그래밍 시스템에서 전체 메모리 중 일부를 운영체제에 의해 할당받게 되어집니다. 그 할당 받은 메모리는 하나의 프로그램을 '프로세스화' 해서 효율적으로 실행하기 좋은 형태로 펼쳐놓는 작업을 하게 됩니다.
그림의 코드(Code) 영역을 살펴보면 실제 이 프로그램이 실행되었을 때, 즉 프로세스가 실행 중일 때 무슨 일을 처리해야 하는지에 대한 명령어 코드를 저장하고 있습니다.
이 영역엔 프로그래머가 작성한 각각의 프로그램 코드들을 컴파일하게 되었을 때 실행하기 위해서 기계어로 번역했을 때 생성된 개별적 문장들이 포함되어 있습니다.
'프로그램이 수행되어진다' 라고 하면 수행할 명령만 있어야 하는 것이 아니라 그 명령을 수행할 때 필요한 데이터들을 적절히 저장할 수 있는 공간이 필요해집니다.
코드 영역 외에 나머지 부분들은 데이터 선언 방법에 따라 여러 영역으로 나뉘어 데이터가 저장됩니다.
데이터(Data) 영역을 살펴봅시다. 이 영역엔 프로그램에서 사용되는 모든 데이터를 저장하는 것이 아니라, 정적 변수들이 저장됩니다. 함수 밖이나 static 키워드로 선언된 전역변수들을 예로 들 수 있습니다.
이런 정적변수들이 갖는 특징은, 프로그램이 시작되었을 때 메모리를 할당받아서 프로그램이 끝날때까지 고정된 메모리 영역에 데이터를 입출력할 수 있다는 것입니다.
그러다보니 프로그램이 시작해서 끝날때까지 언제 어떤 함수가 수행된다 하더라도 항상 접근할 수 있다는 장점을 갖고있습니다.
그러나 반대로, 잠깐동안 사용하기 위해 지속적으로 메모리를 할당해줘야 한다는 점에선 단점이 될 수 있겠죠.
나머지 데이터들은 힙과 스택에 저장됩니다.
힙(Heap)이라는 영역은 동적할당 된 변수를 위해 메모리를 할당하는 공간이며 스택(Stack) 영역은 자동할당 된 변수들을 위한 저장공간이 되는 곳입니다.
프로세스는 또한 PCB(Process Control Block)를 가진 프로그램이라고도 합니다.
PCB는 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조입니다.
---수정중---
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
- 할당받는 시스템 자원의 예
- 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process communication)을 사용해야 한다. (Ex. 파이프, 파일, 소켓 등을 이용한 통신 방법 이용)
- 실행되지 않고 있는 프로그램은 프로세스가 아닌가요?
- 프로세스 메모리 구조 (BSS, Code, Data, Stack, Heap)
- BSS 영역에 해당되는 예시
- Stack, Heap의 차이
- PCB에 저장되는 프로세스 정보 종류
- 프로세스 생명주기(프로세스 상태와 함께)
스레드
- 스레드의 유형
- 스레드의 메모리 구조
- Stack과 PC를 독립적으로 할당하는 이유
'Computer Science' 카테고리의 다른 글
중앙처리장치(CPU) 작동 원리 (0) | 2023.01.09 |
---|---|
컴퓨터의 구성 (0) | 2023.01.08 |