과목명 : 운영체제(Operating System)
수업일자 : 2023년 04월 19일 (수)
1. Process vs Thread

1-1. Process
(1) 각각의 프로세스는 프로그램을 실행하는 데 필요한 리소스를 제공하며, 메모리에 로드되어 운영체제로부터 자원을 할당받은 작업의 단위를 의미합니다.
(2) 프로세스는 가상 주소 공간, 실행 가능한 코드, 시스템 오브젝트에 대한 Open handle, 보안 코드의 컨텍스트, 고유한 프로세스 식별자, 환경 변수, 우선 순위 클래스, 최소 및 최대 작업의 Set, 최소 하나의 실행 가능한 스레드를 보유하고 있습니다.
(3) 이러한 프로세스는 기본적인 protection 단위로써 서로 완전히 분리되어 동작합니다.
(4) 프로세스는 별도의 주소 공간을 보유하지만 스레드는 주소 공간을 서로 공유하고 있습니다.
1-2. Thread
(1) 스레드는 기본적인 Execution의 단위로써 운영체제가 프로세서 시간을 할당하는 기본 단위이기도 하며 프로세스가 할당받은 자원을 사용하는 실행의 단위입니다.
(2) 하나 이상의 스레드가 프로세스 컨텍스트에서 실행되며 각각의 스레드는 독립적으로 실행됩니다.
(스레드는 각각 CPU를 할당받아서 실행되기 때문에 독립적인 실행 구조를 가진다.)
(3) 스레드는 실행을 스케줄링할 수 있는 프로세스 내부에서의 Entity입니다.
1-3. 프로세스 또는 스레드가 차지하는 메모리?
(1) 기본적으로 시스템의 프로세스는 서로 메모리 공간을 공유하지 않지만, 스레드는 동일한 프로세스의 스레드 간에 서로 메모리 공간을 공유합니다.
2. Why is Thread? #1

2-1. 스레드는 프로그램의 다른 부분과 독립적으로 동시에 실행할 수 있는 프로그램의 일부
- 다른 부분과 독립적으로 실행할 수 있는 프로그램의 일부분입니다.
2-2. 스레드는 프로그램의 가장 작은 부분을 차지
- 프로그램 내부에서 독립적인 순차적 실행 경로입니다.
2-3. 프로세스의 실행 스트림(Execution stream)이다.
2-4. 스레드의 이점
(1) Responsiveness
- 사용자에 대한 응답성을 향상시킵니다.
(2) Resource sharing
- 자신이 속한 프로세스의 메모리와 자원을 공유합니다.
(3) Economy
- 스레드보다 프로세스를 생성하고 관리하는 데 더 많은 시간과 자원이 소모되는 특징이 존재합니다.
(4) Scalability
- Multiprocessor의 아키텍처를 활용할 수 있습니다.
3. Why is Thread? #2

3-1. 프로세스는 실행 중인 프로그램이고 스레드는 프로그램(프로세스)에서 별도의 분리된 실행 경로이다.
(1) 스레드는 프로세스 내부의 단일 실행 시퀀스입니다. (경량화된 프로세스라고 표현하기도 함)
3-2. 스레드는 프로그램에서 제어 흐름을 캡슐화한 것으로 볼 수 있다.
(1) Single-thread programs
- "한 번에" 코드를 통해 하나의 경로만 실행하는 프로그램을 의미합니다.
(2) Multi-thread programs
- "동시에" 다른 코드 경로를 통해 여러 스레드가 실행될 수 있는 프로그램을 의미합니다.
3-3. 스레드와 프로세스는 모두 운영체제 자원 할당의 Atomic 단위입니다.
(1) 즉, 프로세서의 시간이 프로세스 사이에 어떻게 분배되는지 동시성 모델(Concurrency model)과 다른 운영체제 리소스를 소유할 수 있는 모델이 존재합니다.
(2) 아래와 같은 차이점이 존재합니다.
- Shared resources
→ 스레드는 앞서 소개된 것처럼 메모리를 공유하며 Stack 및 Local variable를 제외하고는 아무것도 소유하지 않습니다. 프로세스도 메모리를 공유할 수 있지만 이를 위한 별도의 메커니즘이 따로 존재합니다.
- Allocation space
→ 프로세스를 위한 Kernel space vs 스레드를 위한 User space
4. A Process with two Threads of execution

4-1. Process and Thread
(1) 프로세스와 스레드는 상호 독립적인 관계입니다.
(2) 하나의 프로세스는 스레드를 포함하고 있습니다.
(3) 프로세스를 관리하기 위해서 많은 정보들이 필요하며, 운영체제가 프로세스를 관리하기 위한 자료구조의 요소는 매우 많은 것을 알 수 있습니다
(4) 하나의 프로세스에 속하는 스레드들은 프로세스의 메모리 공간, 자원을 공유합니다.
(5) 각 프로세스는 독립적인 주소 공간을 보유하고 있습니다.
(6) 하나의 프로세스에 속하는 다수의 스레드는, 프로세스의 주소 공간을 공유하며 프로세스와 프로세스 간의 통신은 Inter-process communication mechanism을 통해 이루어집니다.
4-2 하나의 프로세스에서 스레드 간의 Context switching은 프로세스와 프로세스 사이의 context switching보다 속도가 더 빠르다.
5. System Call

5-1. User level binding
(1) Language와 System-call 간의 User-level interface
- Input parameters 준비(호출 규칙)
- Supervisior 모드로 진입
- Output parameters 준비(호출 규칙)
(2) Kernel level binding : Kernel 엔트리 포인트와 C-Syscall 함수 간의 Kernel level interface
- (Select syscall function)
- Input parameters 추출
- syscall의 c-function 호출
- Return parameters 준비
- User land로 Return
6. Multithreaded Server Architecture

6-1. Web service의 동작 원리
(1) 웹 브라우저가 웹 서버에 특정 HTML 파일을 요청합니다.
(2) 웹 서버가 해당 파일을 찾아서 클라이언트 측으로 응답합니다.
(3) 클라이언트(웹 브라우저)가 HTML 문서의 내용을 화면에 출력하게 됩니다.
6-2. 다수의 Web Client를 서비스하기 위해서는?
(1) 클라이언트가 접속할 때마다 새로운 프로세스를 생성하여 서비스하는 방법, 웹 서버 하나가 다수의 스레드를 생성하여 서비스하는 방법 2가지가 존재합니다.
(2) 클라이언트가 서비스를 요청할 때마다 동일한 기능을 수행하는 프로세스를 생성하는 것보다 스레드를 생성하여 서비스하는 것이 시스템 자원을 사용하는 측면이나 운영체제가 관여해야 하는 관점에서 더 효율적입니다.
7. Example of Process and Thread

7-1. 하나의 프로세스에 대해 3개의 스레드가 존재하는 것을 보여주고 있다.
7-2. 각각의 스레드는 자신만 사용할 수 있는 Stack 영역을 보유하고 있다.
7-3. 운영체제는 이러한 프로세스를 관리하기 위해 PCB(Process Control Block)을 보유하고 있다.
(1) Windows 운영체제의 경우 _EPROCESS 자료구조를 보유합니다.
- kd> dt nt!_EPROCESS
7-4. 각 스레드를 관리하기 위해 TCB(Thread Control Block)을 보유하고 있다.
(1) Windows 운영체제의 경우 _ETHREAD 자료구조를 보유합니다.
- kd> dt nt!_ETHREAD
7-5. 프로세스 자원은 모든 스레드가 접근할 수 있다. (즉, 공유하고 있다)
(1) Address space
(2) Handle table
- 특정 스레드에서 파일을 열려고 하면 handle이 반환되고 이것은 다른 스레드에서 접근하여 사용할 수 있습니다.
8. Context

8-1. Context
(1) Object의 현재 상태를 기술하기 위한 정보를 의미합니다.
8-2. Processor(CPU) context
- 일련의 명령을 실행하는 데 사용되는 프로세서의 레지스터에 저장된 값의 최소 컬렉션입니다.
(Ex : Stack pointer, addressing registers, program counter ...)
8-3. Process context
- 스레드 실행에 사용되는 레지스터 및 메모리에 저장된 값의 최소 컬렉션입니다.
(즉, 스레드 컨텍스트이지만 최소한의 MMU 레지스터 값도 포함됩니다.)
8-4. Thread context
- 일련의 명령 실행에 사용되는 레지스터 및 메모리에 저장된 값의 최소 컬렉션입니다.
(Ex : Processor context, state ...)
9. Context Switching

9-1. 현재 실행 중인 프로세스의 text, data, heap, stack을 위해 필요한 자원을 점유하고 있다.
(1) CPU
(2) Memory segments
(3) Data structures managed by Operating System(OS)
9-2. Multi-tasking은 특정 프로세스가 시스템의 자원을 독점할 수 없다.
9-3. 프로세스가 시스템 자원을 일정 시간(Time quantum)을 사용한 후 다른 프로세스의 수행을 위해 시스템 자원을 반환한다.
(1) 나중에 현재 중단된 시점부터 다시 수행하기 위해서 필요한 정보를 저장합니다.
9-4. Scheduling에 의해 수행될 프로세스가 선택되고 이를 위한 시스템 자원을 할당한다.
9-5. Observation of context switching
(1) 하나의 프로세스에 있는 다수의 스레드는 서로 주소 공간을 공유하고 있습니다.
(2) Process, Thread를 위한 Context switching을 진행하는 과정에서 시스템의 자원을 사용하기 때문에 시스템에게 부담을 주게 되고 운영체제가 시스템의 프로세서 레지스터, 프로세스별로 관리되어야 할 데이터를 모두 관리하기 때문에 시스템에게 부담을 주게 됩니다.
(3) Thread context switching의 경우 별도의 공유되는 메모리 공간 덕분에 프로세스보다 Context switching 속도가 빠르고 시스템의 자원을 덜 사용하여 시스템의 부담을 덜어줄 수 있는데 이러한 이유는 우선 스레드에서 Context switching이 일어날 때 Stack 영역을 제외한 Code, Data, Heap 영역은 모두 프로세스가 차지하고 있어서 PCB에는 Stack 및 이에 대한 간단한 정보만 저장하면 되기 때문입니다. 이러한 이유 등으로 Process context switching보다 속도, 시스템 자원 사용적인 측면에서 이득을 볼 수 있으므로 Thread의 context switching의 *overhead가 작아 시스템의 부담을 덜어줄 수 있습니다.
* overhead : 어떤 작업을 처리하기 위해 소모되는 간접적인 처리 시간, 메모리 등을 의미합니다.
(4) Overhead가 가장 많이 발생하는 Context switching의 유형은 한 프로세스의 스레드와 다른 프로세스의 스레드 간의 Context switching입니다. 프로세스 전환에는 MMU 설정에 대한 많은 변경 사항을 포함하여 다양한 하드웨어 캐시를 Flush해야 하기 때문입니다.
(5) 동일한 프로세스에서 두 스레드 사이의 Context switching이 훨씬 overhead가 적습니다.
10. WinDbg for Process and Process Lab

10-1. kd> dt nt!_EPROCESS


10-2. kd> dt nt!_HANDLE_TABLE

10-3. kd> dt nt!_LIST_ENTRY

10-4. kd> !process 0 0
(1) 커맨드 라인에서 Ctrl+F 단축키를 통해 notepad.exe를 빠르게 탐색할 수 있습니다.

10-5. kd> dt nt!_EPROCESS ffff8404c7edb080

10-6. kd> dt nt!_HANDLE_TABLE 0xffffb78a`c3249780

- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.
- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.
댓글