반응형
동기식 입출력 / 비동기식 입출력
프로세스가 입출력 요청 → 입출력 처리를 운영체제가 하니 사용자가 운체한테 요청.
- 동기식 입출력: I/O 요청 후 입출력 작업 완료된 후에 제어가 사용자 프로그램에게 넘어감.
- 구현 1
- I/O가 끝날 때까지 CPU 낭비
- 매시점 하나의 I/O만 일어날 수 있음.
- 구현 2
- I/O가 완료될 떄까지 해당 프로그램에게서 CPU 뺏음.
- I/O 처리 기다리는 줄에 그 프로그램을 줄세움
- ready 상태인 다른 프로그램(프로세스)에게 CPU를 준다 (이것도 동기식이라는 거 주의!)
- 현재 수업에서 얘기하고 있는 입출력 방식은 동기식 - 구현 2! (비동기식이 아님!)
- 구현 1
- 비동기식 입출력: I/O 가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감.
⇒ 두 경우 모두 I/O의 완료는 인터럽트로 알려준다.
Thread
- 쓰레드: CPU 수행단위가 여러개 있는 경우 이 하나를 쓰레드라고 함.
- 프로세스 하나 주어지면 code/data/stack으로 구성된 주소공간이 프로세스마다 만들어짐. 이 프로세스를 관리하기 위해 운영체제 내부에 프로세스를 가져.
- 현재 메모리의 어느 부분을 실행하고 있는지에 대해 해당 프로세스에서 해당 코드 부분을 PCB 내에 있는 프로그램 카운터가 가리키고 있음.!
- 쓰레드
- 하나의 프로세스에 해당하는 주소공간은 하나만 띄워놔.
- 현재 CPU가 프로그램 코드 영역에서 어디를 실행하고 있는가에 대해 프로그램 카운터만 여러 개를 두는 것! 프로세스 하나에 CPU 수행 단위만 여러개를 두고 있는데, 이 수행단위가 쓰레드!
- CPU 수행하려면(instruction) 코드 어느 부분을 실행하고 있는지를 가리키는 PC가 있어야 하고
- 프로그램 실행되면서 메모리의 레지스터 값들을 쓰레드(CPU 수행단위)마다 현재 레지스터에 어떤 값을 넣고 PC가 코드 어느 부분을 가리키고 있는지 별도로 유지.
- 코드 어느 부분을 실행하다가 함수를 호출하면 관련 정보를 스택에 쌓아. CPU 수행단위가 여러 개 있게 되면 스택을 별도로 둬야 함.
- 프로세스 자원, 상태, 주소공간 모두 공유. 프로세스 하나에서 (주소공간 공유) 프로세스 상태 역시 하나이므로 공유.
- 단, 쓰레드별로 따로 가지고 있는 건 스택 공간 &CPU 수행 관련 정보(PC, 레지스터)
- 쓰레드: CPU 수행하는 단위.
- 스레드 구성
- pc
- register set
- stack
- → 이것들만 쓰레드 별로 별도로 가져
- 나머지 부분들은 하나의 프로세스 내에서 다른 쓰레드와 공유(=task)
- 코드 섹션
- 데이터 섹션
- OS 자원 등
- 하나의 프로세스 안에는 여러 개의 스레드가 있는데, task는 하나만 있음!
- thread = lightweight process!
- 프로세스 여러 개 두는 것보다 쓰레드 여러 개 두는 게 훨씬 가벼워
- 프로세스가 입출력 요청 → 입출력 처리를 운영체제가 하니 사용자가 운체한테 요청.
- 동기식 입출력: I/O 요청 후 입출력 작업 완료된 후에 제어가 사용자 프로그램에게 넘어감.
- 구현 1
- I/O가 끝날 때까지 CPU 낭비
- 매시점 하나의 I/O만 일어날 수 있음.
- 구현 2
- I/O가 완료될 떄까지 해당 프로그램에게서 CPU 뺏음.
- I/O 처리 기다리는 줄에 그 프로그램을 줄세움
- ready 상태인 다른 프로그램(프로세스)에게 CPU를 준다 (이것도 동기식이라는 거 주의!)
- 현재 수업에서 얘기하고 있는 입출력 방식은 동기식 - 구현 2! (비동기식이 아님!)
- 구현 1
- 비동기식 입출력: I/O 가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감.
- 쓰레드: CPU 수행단위가 여러개 있는 경우 이 하나를 쓰레드라고 함.
- 프로세스 하나 주어지면 code/data/stack으로 구성된 주소공간이 프로세스마다 만들어짐. 이 프로세스를 관리하기 위해 운영체제 내부에 프로세스를 가져.
- 현재 메모리의 어느 부분을 실행하고 있는지에 대해 해당 프로세스에서 해당 코드 부분을 PCB 내에 있는 프로그램 카운터가 가리키고 있음.!
- 쓰레드
- 하나의 프로세스에 해당하는 주소공간은 하나만 띄워놔.
- 현재 CPU가 프로그램 코드 영역에서 어디를 실행하고 있는가에 대해 프로그램 카운터만 여러 개를 두는 것! 프로세스 하나에 CPU 수행 단위만 여러개를 두고 있는데, 이 수행단위가 쓰레드!
- CPU 수행하려면(instruction) 코드 어느 부분을 실행하고 있는지를 가리키는 PC가 있어야 하고
- 프로그램 실행되면서 메모리의 레지스터 값들을 쓰레드(CPU 수행단위)마다 현재 레지스터에 어떤 값을 넣고 PC가 코드 어느 부분을 가리키고 있는지 별도로 유지.
- 코드 어느 부분을 실행하다가 함수를 호출하면 관련 정보를 스택에 쌓아. CPU 수행단위가 여러 개 있게 되면 스택을 별도로 둬야 함.
- 프로세스 자원, 상태, 주소공간 모두 공유. 프로세스 하나에서 (주소공간 공유) 프로세스 상태 역시 하나이므로 공유.
- 단, 쓰레드별로 따로 가지고 있는 건 스택 공간 &CPU 수행 관련 정보(PC, 레지스터)
- 쓰레드: CPU 수행하는 단위.
- 스레드 구성
- pc
- register set
- stack
- → 이것들만 쓰레드 별로 별도로 가져
- 나머지 부분들은 하나의 프로세스 내에서 다른 쓰레드와 공유(=task)
- 코드 섹션
- 데이터 섹션
- OS 자원 등
- 하나의 프로세스 안에는 여러 개의 스레드가 있는데, task는 하나만 있음!
- thread = lightweight process!
- 프로세스 여러 개 두는 것보다 쓰레드 여러 개 두는 게 훨씬 가벼워
반응형
'정글사관학교 개발일지 > 운영체제-PintOS' 카테고리의 다른 글
PintOS Project 1.2(2) - Priority Scheduling-Synchronization(정글사관학교 58일차 TIL) (0) | 2021.12.29 |
---|---|
PintOS Project 1.2(1) - Priority Scheduling(정글사관학교 57일차 TIL) (0) | 2021.12.28 |
PintOS Project 1.1 - Alarm clock (정글사관학교 56일차 TIL) (0) | 2021.12.27 |
운영체제 (2) - 프로세스 (정글사관학교 54일차 TIL) (0) | 2021.12.26 |
운영체제(1) - 시스템 구조/프로그램 실행 (정글사관학교 53일차 TIL) (0) | 2021.12.25 |