[개발 정리]/[OS]
Thread
hskimim
2024. 11. 26. 00:58
kocw 강의 : 이화여자대학교 반효경 교수님의 운영 체제 강의,5강 Thread
학생들이 syncIO 와 asyncIO 를 많이들 질문해서 한번 더 말씀해주시면서 시작한다.
process 가 입출력이 끝날 때까지 기다려야 하면 그건 syncIO 이다.
만약 process 가 입출력을 보내고 바로 다시 cpu 를 잡아서 instruction을 실행할 수 있으면 asyncIO 이다.
A thread (or lightweight process) is a basic unit of CPU utilization
thread 를 process 내부에 cpu 수행 단위가 여러개 있는걸 말한다. -> 멋진 말인데 무슨 말이지
차근차근 한번 들어보자고.. (수업을 들으면서 동시에 쓰는거라 이게 의식의 흐름이다)
- 프로세스가 하나 주어지면, code/data/stack 주소 공간이 프로세스 마다 주어짐.
- 프로세스를 관리하기 위해 os 내부에 pcb 를 관리함.
- pc 는 메모리에 어느 부분을 실행하고 있는지를 가리키고 있음
- 동일한 일을 하는 process가 여러 개 있다고 하면, 그걸 별도의 프로세스로 하면 별도의 주소 공간이 할당되어, 주소 공간이 낭비될 것임
- 주소 공간을 하나만 띄워놓고, 다른 부분의 코드를 실행하게 하면 된다. 그게 바로 위의 이미지 형태
- cpu 사용과 관련된 것은 분리되어 있고, 나머지는 최대한 공유됨
- program counter 는 어떤 code (instruction의 주소를 저장) 를 참고하고 있는지가 다르기 때문에 분리되어야 하고
- register 는 연산 데이터, 명령어 등을 저장해야 하는데 이 부분이 thread 별로 다를 것이기에 분리되어야 한다.
- thread는 cpu 를 수행하는 단위다.
- pc, register set, stack space로 구성된다
- code section, data section, os resources 는 공유한다. -> 이걸 task 라고 부름
- 하나의 process 안에 여러 thread 를 두면 뭐가 좋냐
- 하나의 process 가 blocked(waiting)인 동안에도 동일한 task 내의 다른 thread가 running 되어 빠른 처리를 할 수 있음
- 웹 페이지를 읽는 동안 (I/O) 웹 페이지는 blocked.
- web browser 가 multi-thread 면, 이미지를 불러오는 동안에 불러온 텍스트라도 보여주는 방식
- if one thread is blocked another thread continues -> 일종의 asyncIO
- 동일한 일을 하는 다중 스레드가 협력하기에, 자원을 더 효율적으로 쓸 수 있음
- 병렬성을 높일 수 있다
- 하나의 process 가 blocked(waiting)인 동안에도 동일한 task 내의 다른 thread가 running 되어 빠른 처리를 할 수 있음
- 특정 thread는 kernel 이 지원하고, 어떤 건 library 가 지원한다.
- kernel threads : Kernel 을 통한 지원
- kernel 이 thread의 존재를 안다
- CPU 스케줄링 대상은 스레드 단위
- Windows, Digital UNIX, Mach
- user threads : library를 통한 지원
- kernel 은 threads 를 인식 못함, process 만 관리함
- 따라서 CPU는 프로세스 단위로 스케줄링되고, 프로세스 내부의 어떤 스레드가 실행될지는 애플리케이션의 라이브러리가 결정함
- posix Pthreads, Mach C-threads, Solaris threads
- kernel threads : Kernel 을 통한 지원
뭐랄까... 아직 뭔가 제대로 운영체제를 공부하고 있는 느낌이 안든다. 너무 개괄적인 설명 느낌.. 아직은 준비 운동 중인 것 같다. 궁금한게 점점 많아진다.