[운영체제] 3. 프로세스의 관리 (4) - 쓰레드

jyleever·2023년 2월 19일
0

운영체제

목록 보기
8/9
post-thumbnail

http://www.kocw.net/home/cview.do?lid=f7dd9c50298b4bc5

Thread, 쓰레드

CPU 수행 단위, lightweight process

동일한 웹 브라우저여도 각각의 프로세스로 취급되므로 각각의 Stack, Data, Code 주소공간이 만들어짐 -> 비효율적
-> 실행 파일이 동일하므로 똑같은 기계어로 구성되어있을 텐데 (다른 함수를 호출하고 있을 것이므로 data와 stack은 달라도) 좀 더 효율적으로 사용할 수 있진 않을까?
좀 더 효율적으로 사용하기 위해 쓰레드 도입

동일한 프로그램을 여러 개 띄워놔도 프로세스가 하나만 만들어지는 것
stack, data, code 동일

code의 서로 다른 부분을 실행하고 있을 것이므로 이 부분만 따로 관리를 해주자! -> CPU의 실행 단위

PCB에서 코드의 어느 부분을 수행하고 있는가에 대한 값(pc, register) 만 쓰레드를 여러 개를 둔다.

프로세스에서 cpu 수행 부분만 별도 쓰레드로 가지고 있고 그 외의 것들은 단일 쓰레드로 share하는 것이 효율적!

  • 한 프로세스에서 다른 프로세스로 context switch 하는 것은 오버헤드가 많이 발생
    그러나 한 프로세스에서 쓰레드를 바꿔가면서 사용하면 비싼 오버헤드가 발생하지 않고 효율적으로 수행할 수 있음~

크롬은 쓰레드를 여러 개 띄우면 보안 문제가 발생하므로 프로세스를 여러 개 둔다는 말도 있고.. 이런 식으로 구현 코드가 다를 수는 있음

CPU 사용 단위
PC와 register, 함수 호출과 관련된 stack space는 별도로 가지고 있음
그 외 모든 code section, data section, OS resources는 쓰레드끼리 공유함

정리하자면, 프로세스 내에서 프로세스가 독자적으로 가지고 있는 것이 쓰레드, 공유하고 있는 부분을 task

쓰레드의 장점

  • 다중 쓰레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked (waiting) 상태인 동안에도 동일한 태스크 내의 다른 쓰레드가 실행(running)되어 빠른 처리를 할 수 있다.
    ex) 한 웹 브라우저에서 네트워크에서 어떤 데이터를 갖고 오는 동안, 화면에 표현할 수 있는 text와 같은 것들을 표시해주면 응답성이 빨라 보인다.

    비동기식 I/O가 쓰레드 환경에서 이루어질 수 있는 것!!!

  • 동일한 일을 수행하는 다중 쓰레드가 협력하여 높은 처리율(throughput)과 성능 향상을 얻을 수 있다.
  • 쓰레드를 사용하면 병렬성을 높일 수 있다.

single and multithreaded processes

Benefits of Threads

  • Responsiveness
    응답성이 빠르다.
  • Resource Sharing
    동일 프로세스 안에 있는 쓰레드끼리는 CPU 수행과 관련된 정보를 제외하고는 Stack을 제외한 메모리 등의 자원을 공유하는 효과가 있다.
  • Economy
    프로세스 하나를 만드는 것에 비해 쓰레드 하나를 만드는 것이 효율적이다
    solaris의 경우 약 30배~
  • Utilization of MP Architecture (CPU가 여러 개인 환경(Multi Processor)에서 멀티 쓰레드 사용)
    병렬성을 추구할 수 있다, 굉장히 큰 행렬의 곱셉 시 유용
    행렬의 곱셉을 여러 개의 쓰레드로 나눈 다음 각각의 다른 cpu에 배치하면 작업이 병렬적으로 이루어지므로,, 결과를 빠르게 얻을 수 있을 것

Implementation of Threads

커널 쓰레드 : 운영체제가 쓰레드를 아예 알고 있는 경우
운영체제가 cpu 스케줄링을 할 때 A쓰레드에서 B쓰레드로 넘겨야지 라고 알고 있는 것
유저 쓰레드 : 운영체제가 쓰레드의 존재를 모르는 경우
사용자가 쓰레드 기반으로 프로그램을 만들어도 운영체제에서는 그 쓰레드의 존재를 모르는 것
운영체제는 그 프로세스에 cpu를 주기만 하고, 그 프로세스 내부에서 A쓰레드를 실행하다가 A가 i/o 하러 가면 운영체제에 비동기식 입출력을 요청해서 cpu를 받은 다음 B쓰레드에 넘기는 식...
사용자 프로그램단에서 쓰레드 운영

0개의 댓글