Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- interface block
- fragment
- 파일생성 명령어
- Tutorial
- shader
- 정의
- 하나의 솔루션
- vertexarrayobject
- vertex
- OpenGL
- 튜링기계
- 자동판결
- glDrawArrays
- 멀티프로세스
- vertex sahder
- qtspim stack
- 수리명제
- 시작
- fetching
- multi process
- superbible
- 프로젝트 여러개
- .sln
- glfw
- Qtspim
- 솔루션에프로젝트추가
- VAO
- git
- turingmachine
- visualstudip
Archives
- Today
- Total
공사중
쉽게 정리한 운영체제 | 멀티 프로세스(Multi Process)와 멀티 스레드(Multi Thread) 본문
개발 | 운영체제
쉽게 정리한 운영체제 | 멀티 프로세스(Multi Process)와 멀티 스레드(Multi Thread)
행운개발자 LuckyDeveloper 2020. 11. 1. 10:38본 포스팅은 아래의 주제를 다룹니다.
- 프로세스(Process)란?
- prcess context switching
- 스레드(Thread)란?
- thread context switching
- 멀티 프로세스를 사용해야 하는 경우
- 멀티 스레드를 사용해야 하는 경우
프로세스(Process)란?
- 프로그램이 실행되어 메모리 공간이 할당되는 순간 프로세스가 됩니다.
- 프로세스는 자원 할당의 단위이자 스케줄링의 단위입니다.
- 여러 작업을 동시에 수행해야 할 때, 부모 프로세스는 fork()를 호출해서 자식 프로세스를 생성합니다.
- 프로세스는 각각 독립적인 메모리 영역과 OS resource를 가집니다.
- Memory | Code : program code
- Memory | Data : 전역변수, static 변수
- Memory | Heap : 동적 할당된 메모리
- Memory | Stack : 지역변수, 매개변수
- OS resource : files, I/O devices 등
prcess context switching
- process context switching의 경우 독립적으로 가지는 모든 자원을 store/restore 해야합니다. 뿐만 아니라 완전히 다른 프로세스가 실행되기 때문에 cache memory에 저장되어 있는 데이터도 모두 소멸됩니다.
- 프로세스 간의 통신을 하려면 IPC(Inter Process Communication)라는 복잡한 방법을 사용해야합니다.
스레드(Thread)란?
- 스레드는 프로세스 내에서 독립적인 실행 흐름을 가지는 단위입니다.
- 스레드는 스케줄링의 단위입니다.
- 여러 작업을 동시에 수행해야할 때, 프로세스는 thread()를 호출해서 스레드를 생성합니다.
- 스레드는 아래의 내용을 다른 스레드와 공유합니다.
- Memory | Code : program code
- Memory | Data : 전역변수, static 변수
- Memory | Heap : 동적 할당된 메모리
- OS resource : files, I/O devices 등
- 스레드는 아래의 내용은 각각 독립적으로 가집니다.
- register
- Program Counter(PC)
- Stack Pointer(SP)
- Memory | Stack : 지역변수, 매개변수
thread context switching
- thread context switching의 경우 stack memory를 할당하고 regist, PC, SP 만 store/restore하면 됩니다.
- 스레드들 간의 통신은 Code, Data, Heap 영역을 공유하기 때문에 복잡한 방법 없이 같은 메모리에 동시에 접근할 수 있습니다. 단, critical section의 경우 lock()을 통해서 하나의 스레드만 순차적으로 접근해야합니다.
멀티 프로세스를 사용해야하는 경우
- 여러 개의 프로세스가 필요한 경우 ( ex 하나의 프로세스가 root의 역할을 해야하는 경우)
멀티 스레드를 사용해야하는 경우
- 프로그램이 여러 개의 독립적인 일을 수행해야하는 경우 ( ex 스레드마다 독립적인 GUI를 그려야 하는 경우)
- 여러 요청을 동시에 수행해야하는 서버 ( ex 스레드마다 하나씩의 요청에 대응하고, 응답 과정에서의 통신은 필요 없는 경우)
- 큰 요청을 여러 개의 조각으로 나누고, 각각의 조각에 스레드를 할당할 수 있는 경우 ( ex 작은 조각들을 수행하는 과정에서 통신이 필요없고, 각 조각들의 결과를 모아서 최종적인 결과를 도출하는 경우)
참조