| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
- binarysearch
- 카카오페이
- AI5
- BookReview
- 웹엑스
- microservice
- 이분탐색
- IT
- KAKAO
- LeetCode
- 생성형AI
- 프로세스상태
- CSRF
- cloudnative
- 대출대환서비스
- 최단경로문제
- MSA
- FAANG
- Algorithm
- 핀테크
- 플랫폼수수료
- 은행IT
- 간편결제
- 원자성
- 하이브리드업무
- 카카오웹툰
- 알고리즘
- 운영체제
- 삼성페이
- 시큐어코딩가이드
- Today
- Total
평안하자
[운영체제] 프로세스와 스레드, 멀티스레딩과 멀티프로세싱 본문
누군가에게 보여주기 위함이 아닌 자료 / 강의 기록용으로 정리한 노트입니다.



* 운영체제 커널이 자신의 데이터 영역에서 자료구조로 큐를 만들어놓고, 프로세스의 상태를 바꿔가며 CPU 제어권을 통제한다.

* 데이터 영역에 프로세스 상태를 관리하기 위해 프로세스당 유지하는 정보
문맥교환
CPU에서 실행 중이던 프로세스나 스레드가 대기 중이던 다른 프로세스나 스레드로 교체되는 것을 컨텍스트 스위칭(contet swithching)


2) 의 경우 캐시메모리 flush를 해주어야 하는데 상당한 오버헤드가 든다.


* suspended: 중기 스케쥴러에 의해 swap되어 프로세스 전체가 디스크로 swap out 된 경우. 외부에 의해 작용됨
* blocked: 자기 자신에 의해 발생하며 i/o 작업 등 커널 모드가 필요할 경우. 이벤트 처리 이후 다시 ready

시스템 콜=모니터모드=커널모드
* 주의) 시스템 콜이 일어났을 때 운영체제가 running하고 있다고 표현하지 않고, 프로세스가 커널 모드에서 running하고 있다고 한다. 이때 cpu는 놀게 됨.
사용자프로그램=유저모드


* 프로세스가 입출력이 진행되는 동안에 cpu를 가지고 있든 가지고 있지 않든 instruction을 실행할 수 있는가. 실행하지 않고 기다리면 (입출력이 끝난 후 진행)동기식 입출력, 끝난 여부와 상관없이 진행되면 비동기식 입출력

* 동기식이라 instruction을 기다리는 동안에 cpu를 갖고 있으면 구현방법 1, 갖고 있지 않고 다른 프로세스에게 주면 구현방법2
프로세스, 스레드, 멀티태스킹, 멀티스레딩
스레드

cpu의 기본 실행 단위


cpu 수행과 관련된 정보만 별도로 갖고 나머지는 공유


스레드를 사용하면 생기는 이점
1. 응답성
- 웹 브라우저를 띄워서 홈페이지에 접속한다고 했을 때, 이미지/텍스트 등 다양한 것들을 모아 사용자에게 보여주어야 한다. 이러한 과정에서 네트워크 io 작업이 일어나는데 싱글스레드로 동작하게 되면 block 되어 사용자는 답답하게 된다.
2. 자원 공유
- code, data, resource of process
3. 경제성
- 프로세스보다 스레드를 만들어 프로세스 내에서 cpu 스위칭하는 것이 경제적이다.
캐싱의 경우 프로세스가 바뀌면 flush 되어야 함
4. Multi
- 멀티 프로세싱 환경에서 각 스레드가 병렬적으로 다른 프로세스에서 작업될 수 있다.

* 커널 스레드: 프로세스 안에 스레드가 몇개 있는지 운영체제 커널이 알고 있음
* 유저 스레드: 라이브러리 지원을 받아서 사용자 수준에서 스스로 관리
- 구현상에 제약점이 있을 수 있음
* real time thread
프로세스는 '컴퓨터에서 실행 중인 프로그램'이라는 관점에서 인식하는 게 좋고
스레드는 프로세스가 CPU 코어에서 실제로 실행되기 위한 기준 단위로 인식하는 것이 좋다
결국 중요한 포인트는
실제로 CPU 코어에서 실행되는 것은 언제나 스레드다
이때 같은 프로세스 속한 스레드들끼리 컨텍스트 스위칭이 발생한다면
이건 스레드 컨텍스트 스위칭이라고 불러야 하고
서로 다른 프로세스 속한 스레드들 사이에서 컨텍스트 스위칭이 발생한다면
이 경우엔 프로세스 컨텍스트 스위칭이라고 불러야 한다
프로세스와 스레드는 독립적인 존재가 아니다
프로세스는 메모리에 올라가서 사용자에 의해 컴퓨터 상에서 '실행 중인 프로그램'을 의미하며
그 프로세스의 실행 정보나 상태(메모리 주소 공간, 프로세스 ID, .. etc)는 OS에 의해 관리된다
하지만 실제로 CPU 코어에서 실행되는 것은 스레드다 (이게 매우 중요한 개념 !!)
그렇기 때문에 하나의 프로세스가 CPU 코어에서 실행되기 위해서는 최소한 한 개의 스레드를 반드시 가져야 한다
어떤 경우에 프로세스 혹은 스레드라고 써야 할까?
하나의 스레드가 다른 스레드와 데이터 공유를 한다고 해보겠다
만약 이 두 개의 스레드가 같은 프로세스 소속이라면
'두 스레드가 데이터를 공유한다'라고 얘기할 수 있다
하지만 만약 두 개의 스레드가 각각 서로 다른 프로세스 소속이라면
이 경우에 보다 정확한 표현은 '두 프로세스가 데이터를 공유한다'라고 얘기하는 게 좋다
'OS' 카테고리의 다른 글
| [운영체제] 데드락 (Deadlock) (0) | 2024.03.31 |
|---|---|
| [운영체제] 프로세스 동기화 (Process Synchronization) (0) | 2024.03.30 |
| [운영체제] CPU 스케쥴링 (0) | 2024.03.29 |
| [운영체제] 프로세스 관리 (0) | 2024.03.29 |
| [운영체제] 유저모드와 커널모드, 인터럽트와 시스템 콜 (0) | 2024.03.28 |