- User threads - 라이브러리에 의해 스레드 형태로 만들어지는 모든 모양
- 실행되기 위해 라이브러리가 있어야 됨
- 유저 모드의 스레드들은 커널 스레드와 결합하여 최종적으로는 커널 함수로 돌아감
- Kernel threads - 실제로 커널(또는 CPU)에서 처리되는 스레드
- user 모드에서 라이브러리에 의해 스레드처럼 만들고 돌아가는 형태로 코딩 -> 관리할 여러 모델이 생김 -> 함수 하나에서 스레드들이 떨어짐 + 커널 스레드와 만나서 처리됨
- 동시에 여러 스레드를 동작시킴
- Many-to-One : 유저 모드의 많은 스레드들이 하나의 커널 스레드와 결합
- One-to-One : 하나의 유저 스레드와 하나의 커널 스레드가 결합
- Many-to-Many : 하나 이상의 유저 스레드가 역시 하나 이상의 커널 스레드와 결합
- Two-level : Many-to-Many와 One-to-One이 함께 있음
- 스레드 라이브러리
- 스레드를 만드는 방법
- pthread(POSIX) : 운영체제의 표준안을 만들어 놓고 이 표준안에 따라 각 회사들이 운영체제를 만듦
- windows에서 사용하는 windows set
- 스레드를 사용하는 방법 - 예제
- pthread 방식
- 전역 변수 선언
- void * 는 어떤 타입인지 모른다는 뜻 -> 함수에서 void * 를 사용하면 return 값을 사용하지 않는다는 의미(주소를 가짐)
- arg를 입력 변수로 받음
- printf 5번 반복한 후 pthread_exit(0)로 스레드를 끝냄
- pthread_t라는 구조체를 3개 선언
- pthread_create로 pthread를 만듦 -> pthread.h의 라이브러리 함수
- 첫 번째 인자는 리턴되는 스레드 번호, 세 번째는 Thread라는 함수를 스레드로 만들겠다는 의미, 마지막 값은 이 함수에 넣을 인자를 의미
- Thread라는 함수를 독립적으로 떼어내어 이 프로세스 내에서 메인 함수와 독립적으로 실행시킴 -> for문으로 같은 스레드를 3개 만들어냄
- printf를 하면 입출력이 생기므로 스케줄링이 발생하고 스레드 사이에 순서가 바뀔 수는 있음
- 결과는 printf가 main문에서 3개, Thread에서 15개, 총 18개가 출력
2. windows 방식
- windows.h에서 윈도우의 함수들을 사용
- ThreadFunc를 선언
- 구조체 선언
- 주소를 넘겨주므로 내가 원하는 값으로 바꿔서 사용이 가능
- Sleep은 스케줄링을 요청한다는 의미 -> 잠깐 쉬는 동안 다른 순서의 일을 처리하라는 의미
- 10번 반복 -> 반복할 때마다 다른 스레드에 기회를 줌
- CreateThread로 스레드를 만듦
'운영체제' 카테고리의 다른 글
Chapter 5 - CPU Scheduling - 7주차 (0) | 2019.04.13 |
---|---|
Chapter 5 - CPU Scheduling (0) | 2019.04.09 |
Chapter 2 - 디스크, system call, 운영체제의 구조 (0) | 2019.03.23 |
Chapter 2 - 시스템 구조 (0) | 2019.03.14 |
Chapter 1 - 운영체제의 구조, 운영체제 연산, 프로세스와 메모리 관리 (0) | 2019.03.09 |