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
- stl
- random access
- observer pattern
- material
- thread
- 스마트포인터
- 한국산업기술대학교
- 옵저버 패턴
- sequential
- 유니크포인터
- multi-core
- 멀티쓰레드
- Multithread
- 게임공학과
- MultiCore
- vector
- 복사생성자
- 메모리관리
- 옵저버
- c++
- 멀티코어
- 멀티코어 프로그래밍
- C
- Unreal
- Design Pattern
- 프레임워크
- 디자인패턴
- Atomic
- EFFECTIVE C++
- 쓰레드
Archives
- Today
- Total
태크놀로지
멀티코어 프로그래밍에서의 쓰레드와 프로세스의 관계 본문
한국산업기술대학교 게임공학부 정내훈 교수님 멀티코어 1주차 강의
멀티쓰레드 프로그래밍
멀티쓰레드 프로그래밍
- 현재 운영체제에서 병렬 프로그래밍의 (유일한) 구현 수단
- 하나의 프로세스 안에서 여러개의 쓰레드를 실행 시켜 병렬성을 얻는 프로그래밍 방법
- Windows, Linux, Android, iOS에서 기본으로 제공하는 유일한 병렬 프로그래밍 API
- 하드웨어와 운영체제가 직접 지원하는 것은 이것 뿐
- 다른 API로는 GPGPU가 있음
프로세스
- 운영체제는 사용자의 프로그램을 프로세스 단위로 관리한다.
- 실행파일의 실행 => 운영체제가 파일내용을 메모리에 복사후 시작 주소로 점프하는 것.
- 읽어 들일 때 여러 가지 초기화가 필요하다.
- 시분할 운영체제는 여러 프로세스를 고속으로 번갈아 가면서 실행한다.(시분할)
- 실행중인 프로세스의 상태를 강제로 준비로 변경가능
- 프로세스의 메모리 구조는 다음과 같다.(메모리(Segmant) + CPU CONTEXT)
- Code: 실행될 명령어가 들어가는 구역(기계어)
- Data: 전역변수가 들어가는 구역(+static)
- Stack: 지역변수와 함수 리턴 주소가 들어가는 구역(함수 호출 주소, 파라미터, 리턴 주소)
- Heap: mallock / new로 할당 받은 메모리가 들어가는 구역
- PCB: Process Control Block 운영체제가 관리하는 프로세스 정보가 모인 메모리 구조
- 주소공간 메모리 구조는 프로세스마다 개별적이다. (부모 프로세스의 주소를 자식프로세스에서 사용할시 에러가 남 -> 힙영역이 다르기 때문에)
- 프로세스간의 통신을 하려면 운영체제를 통해 전달받아야한다.
프로세스와 쓰레드
- 프로세스는 초기에 하나의 시작 쓰레드를 가짐
- 쓰레드는 다른 쓰레드를 만들 수 있다.
- 쓰레드 생성은 프로그래머가 지시한다.
- 모든 쓰레드는 자신 고유의 스택을 가지고 있고, Data와 Code를 공유한다.
- 쓰레드는 CPU에서 하드웨어 적으로 관리한다.
- 옆 쓰레드의 stack 접근은 가능하지만, 건드리는 것을 권장하지 않는다.
멀티쓰레드의 메모리 공유
int a;
void func()
{
for(int i=0; i<10; ++i) a= a + i;
}
int main()
{
thread child1 (func);
thread child2 (func);
func();
}
- a의 값은 모든 쓰레드가 공유
- a의 주소 값은 모드 쓰레드에서 같은 값
- i의 값은 모든 쓰레드가 독자적으로 보유
- i의 주소 값은 동시에 실행되는 모든 쓰레드에서 다른 값
프로세스의 대한 쓰레드의 장점
- 생성 Overhead가 적다. (스택이외에 메모리 공유, 실행파일을 다시 읽지도 않음 -> 큰 영향을 미치지는 않음(초반에 한두번하고 끝))
- Context Switch Overhead가 적다.
- 가상 메모리(TLB 교체 오버헤드)
- 쓰레드간의 통신은 간단하다.(프로세스간의 통신 OS입출력해야함)
쓰레드의 단점
- 하나의 쓰레드에서 발생한 문제가 전체프로세스를 멈추게 한다.
- 디버깅이 어렵다.
다음 두번째 포스팅에는, 수업을 듣고 멀티코어 하드웨어 소개와 멀티쓰레드 프로그래밍 설명에 대해 정리 요약하도록 하겠습니다.
출처
한국산업기술대학교 게임공학부 정내훈 교수님 강의 - 멀티코어 프로그래밍
(강의자료 피피티 사진은 원본을 따라보며 피피티로 따로 제작하였습니다.)
'멀티코어' 카테고리의 다른 글
멀티쓰레드 프로그래밍은 어디서 사용되고 있는가? (0) | 2020.09.13 |
---|---|
멀티쓰레드 프로그래밍으로 덧셈프로그램 만들기 (이외 방법) (0) | 2020.09.13 |
멀티쓰레드 프로그래밍으로 덧셈프로그램 만들기 (0) | 2020.09.08 |
멀티코어 하드웨어 소개 (0) | 2020.09.04 |
멀티코어 프로그래밍 개요 & 병렬컴퓨터 (0) | 2020.09.02 |