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
    • 동일한 일을 하는 다중 스레드가 협력하기에, 자원을 더 효율적으로 쓸 수 있음
    • 병렬성을 높일 수 있다
  • 특정 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

뭐랄까... 아직 뭔가 제대로 운영체제를 공부하고 있는 느낌이 안든다. 너무 개괄적인 설명 느낌.. 아직은 준비 운동 중인 것 같다. 궁금한게 점점 많아진다.