티스토리 뷰

운영체제

thread 정리

jazzmaster 2019. 4. 22. 03:49

1. 쓰레드와 프로세스의 차이

스레드는 하나의 프로그램안에서 여러 실행 흐름을 둔다. 

가령 배틀그라운드라는 하나의 프로그램을 실행한다고 치자. 렌더링 작업만 하는 스레드 , 통신을 담당하는 스레드

입력을 처리하는 스레드 등 뭐 이런식으로 생각할 수 있다. 

멀티 프로세스(가령 카톡 크롬 게임)는 독립적인 구조이다.(보통 그렇다는 이야기)

반면에 쓰레드는 공유하는 요소들이 있다. --> 이것때문에 컨텍스트 스위칭 비용(시간이)이 더 효율적이다. 

--> 캐쉬 메모리에 있는걸 그대로 갖다 쓰면 되니까 set을 할일이 별로 없고 get만 해오면 된다

 

 메모리의 관점에서 스레드와 프로세스를 비교하는 것이 이해하기 쉽다.

프로세스는 생성하면 자체적으로 독립적인 메모리 공간을 가진다(그래서 통신이 필요하다면 IPC 인가 뭐시기로 통신을 해야함)

반면에 스레드는 여러개 만들면 코드 영역 데이터 영역 힙 영역을 서로 공유한다.

 

 

2. 스레드의 특징
- 스레드마다 고유한 스택 영역을 가지고 있음 (이것 때문에 스레드를 하나만 만드는 것이 아니라 여러개 만들 수 있음)

- 이전에 프로세스 포스팅에서 상태(러닝 레디 블록 등)를 언급했는데 스레드는 동일하다.

(윈도우에서는 프로세스가 상태를 지니진 않는다)

- 메인스레드는 프로세스당 1개씩 반드시 존재한다(우리가 코딩을 해서 thread를 만들어 주지 않아도)

 

 

 

3. 커널 영역 and  유저영역

 

- 커널 영역은 유저영역을 제외한 나머지

- 유저 영역은 하나의 프로세스에 할당되는 메모리 공간중에서 코드 데이터 스택 힙 영역이다. 

 

그러니까 우리가 하나의 프로그램을 실행하면 그것이 메모리에 올라가고 그 공간에서

유저 영역(코드 데이터 스택 힙) 과 커널 영역이(나머지) 존재한다는 것이다.

 

커널은 우리가 건드릴 수 없다.(일반적으로) --> 예전에 인텔 cpu 보안 결함 사태(스펙터였나?)에서 이 커널을 건드려서 

해킹을 할 수 있는 그런 일이 있었다. 

 

 

 

 

4. 커널 모드 and 유저 모드

- 윈도우는 커널 모드 or 유저 모드로 동작하게 설계되어 있다

- 일반적인 프로그램은 유저모드에서 동작

- 시스템콜을 하게 된다면 유저모드에서 커널모드로 전환(커널모드는 유저 영역 커널 영역 모두 접근 가능)

 

--> 모드의 전환은 비용이 발생한다. 부담스러운 일임

 

 

 

 

 

5. 스레드 생성 

- 스레드를 생성될 때마다 독립적인 스택을 할당해준다. 이말은 램이 허용하는 만큼 스레드를 생성할 수 있다.

- CreateThread 함수는 2개 이상의 스레드가 하나의 메모리 공간에 동시 접근하는 문제를 야기한다.

- _beginthreadex는 독립적으로 메모리 공간을 할당 받음(메모리 할당을 안전하게 받고 CreateThread 호출)

- 스레드는 아무리 많아도 결국 단 1개만 Running 상태가 된다. 근데 왜 Data race가 발생할까?

  레지스터에서 연산을 하고 메모리에 다시 저장을 해야 하는 순간에 스케줄러가 레디로 바꾸고

  다른 스레드를 실행시킬 수 있다. 이러한 과정에서 공유 데이터는 정확하게 연산이 되지 못함

  read만 하는거면 상관없음. write가 문제. 

'운영체제' 카테고리의 다른 글

window 문자와 문자열  (0) 2019.06.07
메모리에 관한 이야기  (0) 2019.04.28
스레드 동기화 정리  (0) 2019.04.27
커널 오브젝트 , 핸들  (0) 2019.04.21
프로세스 정리  (1) 2019.04.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함