5회차 운영체제 | 프로세스, 스레드, PCB 등 질문 정리

728x90

24.01.16 화 질문 내용 모음  |    24.04.04 답변 업데이트

1) Context Switching(문맥 교환)에 대해 설명하고, 왜 필요한지 설명해주세요.

- CPU는 한 번에 하나의 프로세스를 수행하는데, 실생활에서는 여러 개 프로세스를 동시 수행하길 원하고, 따라서 CPU가 동시 수행하는 것처럼 보이기 위해 여러 프로세스를 번갈아가며 수행한다.
- 또한, 문맥교환 시간보다 I/O 작업이 더 오래걸려서, 그 사이에 문맥교환을 하는 것이 더 효율적이다 .

2) 스레드가 스택을 제외해서 자원을 공유하는데, 왜 스택은 따로 할당받나요?

- 스택은 함수의 실행과 관련있다. 각 스레드가 독립적인 실행 흐름을 갖기 위한 최소 조건으로 스택 영역에 대해서는 별도로 할당받는 것이다.

3) 멀티 쓰레드의 장점 2가지, 단점 2가지를 말해주세요.

- [장점] 1) 메모리를 공유하기 때문에 문맥 교환 시 자원 소모량이 적다. = 문맥 교환 시 오버헤드 적다 = 따라서 빠르다

- [장점] 2) 스택 제외한 메모리 공유하기 때문에, 스레드 간 통신 (ITC) 부담도 적다. 

- [단점] 1) 자원을 공유하기 때문에 동기화 문제가 생길 수 있다. (적절한 동기화 작업이 필요하다.)

- [단점] 2) 한 스레드의 문제 발생 시, 포함되는 프로세스 내의 다른 스레드들에게도 영향을 미친다.

4) PCB에 저장되는 여러 정보가 있는데, 무엇이 있는지 3가지 이상 말해주세요. 그렇다면 PCB는 어디에 저장될까요 ? 

PCB는 Process Control Block 으로서, OS가 프로세스 제어하기 위해 상태 정보를 저장하는 구조체이다. 
보통 프로세스 생성 시 고유 PCB 생성되고 종료 시 제거된다.

[PCB에 담기는 정보들] : 프로세스 ID,  프로세스 스케줄링 상태, 프로그램 카운터, CPU 레지스터, CPU 스케줄링 정보, I/O 상태 정보, 포인터 등 
[PCB 관리] LinkedList로 관리된다. 중요한 정보가 담겨있으므로 운영체제의 커널 영역에 저장된다. 

5) 크롬은 프로세스인지, 스레드인지 말하고, 이유도 말해주세요.

크롬 탭은 프로세스이다. 한 탭의 오류가 다른 탭에 영향을 미치지 않기 때문에 스레드라고 보기 어렵다. 

6) 프로세스 실행~종료 상태까지의 과정을 설명해주요.

- 프로그램이 메모리에 올라가면 [생성]상태가 된다. 이때 OS에 의해 PCB가 생성된다.
- 프로세스가 되면 [준비]상태에 접어든다. 준비 큐에서 CPU에 할당될 때까지 자기 차례를 기다린다.
- CPU 스케줄러에 의해 자신의 차례가 되면 프로세스는 [실행]상태가 되어 CPU를 할당받고 작업을 진행한다. 주어진 시간동안 작업이 가능하며 시간이 끝나면 인터럽트가 발생하여 다시 준비 상태가 된다. 
- 실행 중이던 프로세스가 입출력 작업을 요청한 경우 CPU 작업을 중단하고 입출력 처리를 해야 하기 때문에 block 명령이 발생하여 해당 프로세스는 입출력이 끝날 때까지 [대기]상태가 된다. 그리고 입출력이 완료되면 다시 [준비] 상태에 접어든다.     //이미 CPU 점유 중인 프로세스가 있을 수 있기 떄문이다. 준비 큐에서 자기 차례를 다시 기다리게 된다.
- 프로세스의 작업이 모두 완료되면 [종료] 상태에 접어들며 PCB와 프로세스 정보는 제거된다. 

7) 프로세스와 스레드를 비교 설명해주세요 (+ 멀티 스레도, 멀티 프로세스 차이 설명)

프로세스 vs 스레드
 - 프로세스는 실행 중인 프로그램을 말한다. 프로세스 구조는 [코드, 데이터, 힙, 스택] 영역으로 나뉘며 이 영역을 각 프로세스마다 갖기 때문에 문맥교환 비용은 크다. 다만 공유하는 영역이 없으므로 동기화 작업은 필요하지 않다.
- 스레드는 한 프로세스 내의 실행 흐름 단위를 말한다. 스레드는 스택 영역은 별도로 갖되, 나머지 영역은 공유한다.
공유하는 영역이 있어서 동기화 작업이 별도로 필요하다. 그래도 스택 제외 영역은 공유하기 때문에 문맥 교환 오버헤드는 적다.

멀티 프로세스 vs 멀티 스레드 
- 멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 미치지 않는다. 
- 멀티 스레드는 하나의 스레드가 죽으면 다른 스레드들에 영향을 미친다.

8) 병렬성과 동시성에 대해 설명해주세요.

동시성 : 싱글 코어에서 실제로 동시 X, 동시에 일어나는 것처럼 빠르게 번갈아 실행시킴
병렬성 : 멀티 코어에서 각 코어들을 동시 실행하는 것 

9) 선점형, 비선점형 스케줄링에 대해서 설명해주시고, 각각 대표 알고리즘에 대해서 설명해주세요.

하나의 프로세스가 이미 CPU를 차지하고 있는 시점에, 우선순위 높은 P가 현재 프로세스의 자리를 뺏을 수 있으면  (선점형) 스케줄링, 뺏지 못하고 기다리면 (비선점형) 스케줄링이다.
[선점형]
- RR (라운드로빈) : 프로세스마다 같은 크기 CPU 시간 할당한 뒤 시간 내 처리 못하면 선점하여 다음 P가 점유
- SRT (Shortest Remaining Time) : 가장 짧은 시간 소요되는 프로세스 먼저 수행함
[비선점형]
- FCFS(First Come First Serve) : 프로세스가 대기 큐 온 순서대로 CPU 할당받음 ( * 콘베이 현상 : 순서에 따라 수행 시간 짧엔 P가 한없이 대기하는 현상)
- SJF (Shortest Job First Scheduling) : CPU 실행 시간 가장 짧은 프로세스에게 먼저 CPU를 차례로 할당하는 방식 (*실행시간 긴 프로세스가 되려 실행 못하는 기아현상 발생 가능)

10) 문맥교환이 언제 발생하는지 알려주세요. 2가지 이상.

- 1) CPU 스케줄링에 의해 할당된 작업 시간 끝났을 때 time out으로 인터럽트 발생함
- 2) 프로세스 자체의 작업이 끝나버렸을 때
- 3) 실행 중이던 프로세스가 입출력 요청 시  


✅ 운영체제란 무엇인가?

운영체제는 하드웨어 자원을 관리하고, 응용 프로그램와 하드웨어 사이를 중재하는 인터페이스를 의미합니다.

✅ 커널이란 무엇인가?

커널은 메모리에 상주하는 운영체제의 핵심 부분이라고 할 수 있습니다.
컴퓨터의 메모리 자원을 효율적으로 사용하기 위해 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다.
그 중 커널은 메모리에 상주하는 부분으로써 운영체제의 핵심적인 부분을 뜻합니다.

✅ 프로세스와 스레드에 대해 설명하고, 둘의 차이에 대해 설명하시오.

1) 프로세스
메인 메모리(주기억장치)에 적재되어 실행되는 프로그램을 의미합니다.PCB, code, data, heap, stack 영역을 갖습니다.프로세스별 각각의 영역을 갖기 때문에 별다른 동기화 작업이 필요하지 않습니다.프로세스별 각각의 영역을 갖기 때문에 context switching 비용이 큽니다.프로세스 쓰레드보다 무겁기 때문에 생성 시간이 더 깁니다.한 프로세스에서 오류가 생기더라도 다른 프로세스에 영향을 주지 않습니다.

2) 쓰레드
한 프로세스 내의 실행 단위, 실행의 흐름을 의미합니다.stack 영역만 별도로 갖고, 나머지 영역(code, data, heap)에 대해서는 해당 쓰레드를 포함한 프로세스의 자원을 공유합니다.stack 영역 외부의 공유 자원에 대해 접근 시 동기화 작업이 필요합니다.stack 영역 외부를 공유하므로 컨텍스트 스위칭 비용이 적습니다.쓰레드는 프로세스보다 가볍기 때문에 생성 시간이 더 짧습니다.한 쓰레드에서 오류가 생기면, 나머지 프로세스 내의 쓰레드에 영향을 줄 수 있습니다.

✅ 문맥 교환 (컨텍스트 스위칭)에 대해 설명하고, 왜 필요한지 설명해주세요.

문맥교환(context switching)은, 여러 프로세스를 처리해야 하는 상황에서 현재 진행중인 Task(프로세스 혹은 쓰레드)의 상태를 PCB에 저장하고, 다음에 진행할 Task의 상태 값을 읽어 레지스터에 적재하는 과정을 의미합니다.

 예를 들어, CPU Cycle의 속도는 I/O 작업에 비해 굉장히 빠릅니다.
I/O 작업이 실행되고 Blocking 된다며, CPU는 아무런 일을 하지 않고 오랜 기간동안 쉬게 됩니다.
컨텍스트 스위칭을 통해 다른 프로세스나 쓰레드의 작업으로 전환한다면, CPU의 사용률을 높일 수 있습니다.
컨텍스트 스위칭을 진행하는 동안 다른 작업을 할 수 없는데(오버헤드), 보통 이 시간보다 I/O 작업이 더 오래 걸리기 때문에 컨텍스트 스위칭을 하는 것이 효율적입니다. 또한 컨텍스트 스위칭이 있기 때문에 여러 프로세스를 처리할 수 있습니다.
CPU가 다른 프로세스로 전환하면 시스템은 프로세스의 상태를 PCB에 저장합니다대기열에서 다음 프로세스를 선택하고 해당 프로세스의 PCB를 복원합니다.PCB의 프로그램 카운터(레지스터)가 로드되어 이전까지 작업한 곳의 지점으로 돌아가 선택한 프로세스의 작업을 이어서 합니다.


문맥 교환이 필요한 이유:
1) 다중 작업 지원:여러 프로세스를 동시에 실행하면서 CPU를 효율적으로 활용하기 위해서는 문맥 교환이 필요합니다. 문맥 교환이 없다면 한 프로세스가 끝날 때까지 기다려야 하므로 다른 프로세스가 실행되지 못할 것입니다.
2) 공평성 및 우선순위 부여:프로세스 스케줄링을 통해 CPU를 여러 프로세스에 분배할 때, 우선순위나 시간 할당량에 따라 교환이 필요합니다. 이를 통해 우선순위가 높은 프로세스나 시간을 할당받은 프로세스가 공평하게 CPU를 사용할 수 있습니다.
3) 응답 시간 개선:문맥 교환이 빠르게 이루어짐으로써, 여러 프로세스 간에 빠르게 전환되어 응답 시간을 개선할 수 있습니다.
4) 멀티태스킹 및 멀티윈도우 환경:멀티태스킹 환경에서 여러 작업이 동시에 이루어지고, 멀티윈도우에서 여러 응용프로그램이 동시에 실행될 때, 문맥 교환이 필요합니다.

종합적으로, 문맥 교환이 다중 프로세스 환경에서 프로세스 간의 공평한 CPU 사용, 응답 시간 개선, 다중 작업 지원 등을 가능케 하는 중요한 기능입니다.

✅ PCB (프로세스 제어 블록)에 대해 자세히 설명해주세요.

프로세스 제어 블록(Process Control Block, 줄여서 PCB)은 프로세스를 관리하기 위한 정보를 포함하는 OS 커널의 자료 구조입니다.

  • OS는 프로세스의 생성과 동시에 고유한 PCB 를 생성합니다.
  • PCB가 프로세스의 중요한 정보를 포함하고 있기 때문에, 일반 사용자가 접근하지 못하도록 보호된 메모리 영역 안에 위치합니다.
  • 프로세스는 수행할 차례가 되면, CPU를 할당받아 작업을 처리합니다. 작업을 처리하던 도중 프로세스의 시간이 모두 경과되거나 인터럽트가 발생하는 등의 프로세스 전환이 발생하면, 진행하던 작업을 저장하고 CPU 를 반환합니다. 이 때, 수행하던 프로세스 관련 데이터들을 PCB 에 저장합니다. 그리고 다시 프로세스의 수행 차례가 와서 CPU 를 할당받게 되면, PCB 에 저장되어있던 내용을 불러와 이전에 종료됐던 시점부터 다시 작업을 수행합니다. 이렇게 사용하던 프로세스의 데이터를 PCB에 저장하고, 실행할 프로세스의 데이터를 PCB에서 불러오는 과정을 Context Switching 이라고 합니다.
PCB 에 저장되는 정보는 아래와 같습니다.

프로세스 식별자(Process ID, PID) : 프로세스 식별번호
프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장
프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 주소
CPU 레지스터 CPU 스케쥴링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정번호 등

✅ 크롬 브라우저에서 한 탭에 오류 생기더라도, 다른 탭에 영향 끼치지 않습니다. 그렇다면 각각의 크롬 탭은 프로세스인지 쓰레드인지 설명해보세요

크롬 탭이 쓰레드라면, 한 크롬 탭에서 오류가 생기면 다른 크롬 탭에도 영향이 갈 수 있습니다. 따라서 한 탭에 오류가 생기더라도 다른 탭에 영향을 끼치지 않는다는 특성에 의해, 크롬 탭은 별개의 프로세스인 것을 알 수 있습니다.

✅ 프로세스의 생성 과정에 대해 설명해보세요

프로그램이 프로세스가 되려면, 메모리의 빈공간에 올라가고, 동시에 프로세스 제어블록이 생성되어야 합니다. 이러한 과정을 거치면 프로그램이 프로세스가 됩니다.

프로세스 생성과정

a. OS 커널에 PCB를 생성b. 메모리 공간 할당c. 이진 파일 적재d. 프로그램 실행

✅ IPC의 통신 과정 설명

우선 IPC는 서로 독립적인 구조를 가진 프로세스간의 통신 방법을 의미합니다.
프로세스간의 통신을 위해 각 프로세스에서 공통적으로 접근가능한 메모리 공간을 활용하여 통신하게 됩니다.

대표적인 IPC 방법에는 pipe, 공유 메모리, 소켓, 메시지큐, 메모리맵을 통한 방법이 잇습니다.

첫번째는, PIPE (익명 파이프) 입니다. PIPE는 두 프로세스간 파이프를 연결해서 통신을 하는 방식입니다. 여기서 한 프로세스는 쓰기만 가능하고 다른 프로세스는 읽기만 가능하다는 특징이 있습니다. 한쪽 방향으로만 통신이 가능하기 때문에 반이중 통신이라고 부르기도 합니다. PIPE는 간단하게 사용할 수 있다는 장점이 있습니다.

두번째는, Named PIPE (FIFO) 입니다. PIPE는 통신하는 프로세스가 명확할 경우 사용하는 반면, Named PIPE는 전혀 모르는 사이의 프로세스들의 통신에 사용합니다. 익명 PIPE는 부모가 동일한 프로세스들 사이에서만 통신이 가능하지만 Named PIPE는 부모 프로세스에 상관없이 프로세스들 사이의 통신을 할 수 있다는 점이 특징입니다. 이는 프로세스 통신을 위해 mkfifo함수를 이용해 파일을 생성하기 때문에 가능합니다. 하지만, 익명 PIPE와 동일하게 동시에 읽기/쓰기가 불가능 합니다. 이는 두개의 파일을 읽기전용, 쓰기전용으로 만들어서 해결할 수 있습니다. 전이중 통신을 위해서는 두 개의 fifo 파일을 만들어서 사용해야 합니다.

세번째는, 메세지 큐 입니다. 메세지 큐는 선입선출의 형태로 통신이 이루어지는 점에서 Named PIPE와 동일합니다. 차이점은 Named PIPE가 데이터의 흐름이라면 메세지 큐는 메모리 공간이라는 점입니다. 이는 여러개의 프로세스가 메세지 큐의 데이터에 접근할 수 있음을 의미합니다.

네번째는, 공유메모리 입니다. 앞서 PIPE, Named PIPE, 메세지 큐가 통신을 이용해 데이터를 주고받는다면, 공유메모리는 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 지원합니다. 프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당해줍니다. 이후 어떤 프로세스건 해당 메모리영역에 접근할 수 있습니다. 공유 메모리는 곧바로 메모리에 접근할 수 있기 때문에 IPC 방식 중 속도가 제일 빠릅니다.

다섯번째는, 메모리 맵 입니다. 메모리 맵은 공유 메모리와 메모리를 공유한다는 점은 동일합니다. 하지만, 현재 열려져 있는 파일을 공유하는 점에서 차이가 있습니다. 열린 파일이 메모리에 올라가있으면 다른 프로세스가 해당 파일을 사용할 때 또다시 파일을 열지않고 공유한 상태로 사용하는 것이 더 효율적입니다.

여섯번째는, 소켓입니다. 소켓은 소켓을 만들어 통신하는 방법입니다. 소켓 통신은 데이터 교환을 위해 양쪽 PC에서 각각 임의의 포트를 정하고 해당 포트 간의 대화를 통해 데이터를 주고받는 방식입니다. 이 때 각각 PC의 프로세스는 임의의 PORT를 맡아 데이터를 송수신 합니다.

✅ Heap과 Stack의 차이점은 무엇인가요?

Heap영역과 Stack영역 각각에 담기는 정보에 차이가 있습니다.
stack영역에는 compile시 선언된 지역변수나 매개변수 등의 정보가 담기고,
heap 영역에는 런타임시 크기가 결정되는 정보들이 담깁니다.
용어의 명칭과 다르게 stack 영역의 경우에는 stack으로 구현되어 있으나,
heap영역은 heap자료구조가 아닌 linked list로 주로 구현되어 있습니다.

✅ 프로세스에 할당되는 메모리의 각 영역에 대해서 설명해 주세요.

프로세스에 할당되는 메모리 영역은 크게 코드, 데이터, 스택, 힙으로 4가지로 나뉩니다.
코드영역에서는 실행할 명령어가 저장되고, 데이터 영역에서는 전역변수나 정적변수가 저장됩니다.
스택영역에서는 함수 호출에 필요한 스택 프레임을 저장해둡니다.
힙영역에서는 런타임시 사용자가 관리하는 공간으로 메모리가 동적으로 할당되고 해제됩니다.

✅ 프로세스 혹은 스레드의 동기화란 무엇인가요?

동기화란 병렬적으로 수행되는 작업들에 대해 자원 접근 순서를 정해
서로가 알고 있는 정보가 일치하도록 하는 것을 의미합니다.
공유하는 자원의 일관성을 유지하기 위해 수행합니다.

✅ 컨텍스트 스위칭이란 무엇인가요?

여러 프로세스를 처리해야 하는 상황에서 현재 진행중인 Task(프로세스, 스레드)의 상태를 PCB에 저장하고 다음에 진행할 Task의 상태값을 읽어 적용하는 과정을 말한다.
컨텍스트 스위칭은 멀티태스킹, 인터럽트 핸들링, 사용자 모드와 커널 모드 전환 등으로 인해
필요하게 됩니다.

✅ 멀티 프로세스와 멀티 스레드 각각의 장단점

멀티 스레드는 멀티 프로세스보다 메모리 공간을 공유해서 사용하기 때문에 적은 메모리 공간을 차지하고 Context Switching이 빠르다는 장점이 있지만, 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다는 점과 동기화 문제를 가지고 있다.
반면, 멀티 프로세싱 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 존재한다.

멀티 스레드: 카카오톡
멀티 프로세스: 크롬탭

✅ 시스템 콜이란 무엇인가요?

시스템 콜은 사용자나 응용 프로그램이 커널에서 제공하는 기능을 사용하기 위한 인터페이스 입니다.
운영체제는 커널이 제공하는 서비스를 시스템콜을 이용해 제한함으로써 컴퓨터 자원을 보호합니다.
예시로는 프로세스 생성/종료나 I/O작업 등이 있습니다. (fork, exec, exit, wait)

✅  멀티 프로세스와 멀티 쓰레드의 특징에 대해 설명해주세요.

멀티 프로세스는 하나의 프로세스가 죽어도 다른 프로세스에 영향을 끼치지 않고 계속 실행된다는 장점이 있지만
멀티 쓰레드보다 많은 메모리 공간과 CPU 시간을 차지한다는 단점이 있습니다.
멀티 쓰레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 문맥 전환이 빠르다는 장점이 있지만
하나의 쓰레드에 문제가 생기면 전체 쓰레드가 영향을 받으며 동기화 문제도 있다는 단점이 있습니다.

✅  멀티 쓰레드의 동시성과 병렬성을 설명해주세요.

동시성: 멀티 작업을 위해 싱글 코어에서 여러 개의 쓰레드가 번갈아 실행하는 것을 말합니다. (동시에 실행하는 것처럼 보이지만 사실은 번갈아가며 실행하고 있는 것임)
병렬성: 멀티 작업을 위해 멀티 코어에서 한 개 이상의 쓰레드를 포함하는 각 코어들을 동시에 실행하는 것을 말합니다.

✅  프로세스와 쓰레드의 차이에 대해 설명해주세요.

  • 프로세스는 실행 중인 프로그램을 말하며, 완벽히 독립적이기 때문에 메모리 영역(Code, Data, Heap, Stack)을 다른 프로세스와 공유하지 않습니다. 프로세스는 최소 1개의 쓰레드(메인 쓰레드)를 가지고 있습니다.
  • 쓰레드는 프로세스 내에서 Stack만 따로 할당 받고, 그 이외의 메모리 영역(Code, Data, Heap)영역을 공유하기 때문에 다른 쓰레드의 실행 결과를 즉시 확인할 수 있습니다. 쓰레드는 프로세스 내에 존재하며 프로세스가 할당받은 자원을 이용하여 실행됩니다.
  • 멀티태스킹은 하나의 운영체제 안에서 여러 프로세스가 실행되는 것 입니다.
  • 멀티스레드는 하나의 프로세스가 여러 작업을 여러 스레드를 사용하여 동시에 처리하는 것입니다.

멀티스레드의 장점

  1. Context-Switching할 때 공유하고 있는 메모리만큼의 메모리 자원을 아낄 수 있다.
  2. 스레드는 프로세스 내의 Stack 영역을 제외한 모든 메모리를 공유하기 때문에 통신의 부담이 적어서 응답 시간이 빠르다.

멀티스레드의 단점

  1. 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료될 수 있다.
  2. 자원을 공유하기 때문에 필연적으로 동기화 문제가 발생할 수밖에 없다. 또한 스레드의 스케줄링은 운영체제가 저리하지 않기 때문에 프로그래머가 직접 동기화 문제에 대응할 수 있어야 한다.
  • 프로세스는 다른 프로세스와 정보를 공유하려면 IPC를 사용하는 등의 번거로운 과정을 거쳐야 하지만, 스레드는 기본 구조 자체가 메모리를 공유하는 구조이기 때문에 다른 스레드와 정보 공유가 쉽습니다. 때문에 멀티태스킹보다 멀티스레드가 자원을 아낄 수 있게 됩니다. 다만 스레드의 스케줄링은 운영체제가 처리하지 않기 때문에 프로그래머가 직접 동기화 문제에 대응할 수 있어야 합니다.

✅ 스레드마다 독립적으로 할당하는 2가지에 대해 설명해주세요

쓰레드는, 독립적으로 스택 영역과 PC Register를 갖고 있습니다. 그 이유는 쓰레드의 정의와 컨텍스트 스위칭에 있습니다.
독립적으로 스택 영역을 갖는 이유 : 스택 영역은 함수의 실행과 관련이 있습니다. 독립적으로 스택을 갖는다는 것은 곧 독립적으로 함수 호출이 가능하다는 것을 의미합니다. 즉, 프로세스 내의 독립적인 실행 흐름을 만들기 위해 쓰레드마다 스택 영역을 갖습니다.

독립적으로 PC Register를 갖는 이유 : PC Register 값은, 쓰레드가 명령어를 어디까지 수행했는 지를 나타냅니다. 쓰레드는 CPU를 할당받았다가, 스케줄러에 의해서 선점당해 컨텍스트 스위칭이 일어납니다. 따라서 다시 해당 쓰레드가 실행될 때 어디까지 실행이 되었는지 알아야 하므로 독립적으로 PC Register 값을 갖게 됩니다.

✅ 멀티 스레드 환경에서 주의해야 할 점

  • 멀티 스레드는 서로 한 프로세스 내의 자원을 공유하므로 동기화를 항상 고려해야 한다.

멀티프로세스와 멀티스레드 중 어떤 것을 사용해야할까?

두 방법은 동시에 여러 작업을 수행한다는 측면에서 유사한 면이 있다.
적용할 시스템에 따라 두 방법의 장단점을 고려하여 적합한 방식을 선택해야 한다.
메모리 구분이 필요할 때는 multi process가 유리하고, Context switching이 자주 일어나고 데이터 공유가 빈번한 경우, 그리고 자원을 효율적으로 사용해야 되는 경우에는 multi thread를 사용하는 것이 유리하다.

✅ 프로세스의 종류

  •  
자식 프로세스: fork로 자식 프로세스를 만든 상태, 부모의 데이터, 힙, 스택, PCB 복사

데몬 프로세스: 백그라운드에서 동작하면서 특정한 서비스를 제공하는 프로세스

고아 프로세스: 부모 프로세스가 먼저 종료되어 고립된 자식 프로세스

좀비 프로세스: 자식 프로세스가 종료되었음에도 불구하고 부모 프로세스로부터 작업 종료에 대한 승인을 받지 못한 프로세스
728x90