티스토리 뷰
1)프로세스
프로세스는 메모리에 올라갈 때 운영체제로부터 시스템 자원을 할당받는다고 언급했었다. 이 때 운영체제는 프로세스마다 각각 독립된 메모리 영역을, Code/Data/Stack/Heap형식으로 할당해 준다. 각각 독립된 메모리 영역을 할당해 주기 떄문에 프로세스는 다른 프로세스의 변수나 자료에 접근할 수 없다.
이와 다르게 스레드는 메모리를 서로 공유할 수 있다. 이에 대해 더 자세히 설명하자면, 프로세스가 할당받은 메모리 영역 내에서 stack 형식으로 할당된메모리 영역은 따로 할당받고, 나머지 Code/Data/Heap 형식으로 할당된 메모리 영역을 공유한다. 따라서 각각의 스레드는 별도의 스택을 가지고 있지만 힙, 메모리는 서로 읽고 쓸 수 있게 된다.
(스레드들이 프로세스의 Code/Data/Heap 메모리 영역을 공유하는 모습 (이미지 출처: Heee's Development Blog))
여기서 프로세스와 스레드의 중요한 차이를 하나 더 알 수 있다. 만약 한 프로세스를 실행하다가 오류를 발생해서 프로세스가 강제로 종료된다면, 다른 프로세스에게 어떤 영향이 있을까? 공유하고 있는 파일을 손상시키는 경우가 아니라면 아무런 영향을 주지 않는다.
그런데 스레드의 경우는 다르다. 스레드는 Code/Data/Heap메모리 영역의 내용을 공유하기 때문에 어떤 스레드 하나에서 오류가 발생한다면 같은 프로세스 내의 다른 스레드 모두가 강제 종료된다.
위에서 말했듯이 스레드를 코드(프로세스) 내에서의 함수(스레드)에 빗대어 표현해보면 훨씬 이해하기가 쉽다.
그렇다면 왜 이런 방식으로 메모리를 공유할까?
스레드는 "흐름의 단위"라고 이해하면 되는데, 정확히는 CPU 입장에서의 최소 작업 단위가 된다. CPU는 작업을 처리할 때 스레드를 최소 단위로 삼고 작업을 한다. 반면 운영체제는 이렿게 작은 단위까지 직접 작업하지 않기 때문에운영
'CS > OS' 카테고리의 다른 글
프로세스와 스레드의 차이 (0) | 2022.03.29 |
---|
- Total
- Today
- Yesterday
- vue.js3
- props
- useState
- Http통신
- focus와blur
- react
- React18v
- Vue.js
- Repository pattern
- 이벤트버스
- 항해솔직후기
- 로그인 인증
- vue3
- http
- reactnative
- loadbalancer
- 항해플러스프론트엔드
- 더미데이터
- Vuex
- event종류
- 이벤트리스너
- eventListner
- 디바운싱
- 빅오표기법
- store.js
- 알고리즘
- 항해플러스후기
- 웹훅
- 레포지토리패턴
- JWT토큰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |