정글사관학교 개발일지/운영체제-PintOS

운영체제 (3) - 프로세스, 스레드 (정글사관학교 55일차 TIL)

Woonys 2021. 12. 27. 01:15
반응형

동기식 입출력 / 비동기식 입출력

프로세스가 입출력 요청 → 입출력 처리를 운영체제가 하니 사용자가 운체한테 요청.

 

  1. 동기식 입출력: I/O 요청 후 입출력 작업 완료된 후에 제어가 사용자 프로그램에게 넘어감.
    • 구현 1
      • I/O가 끝날 때까지 CPU 낭비
      • 매시점 하나의 I/O만 일어날 수 있음.
    • 구현 2
      • I/O가 완료될 떄까지 해당 프로그램에게서 CPU 뺏음.
      • I/O 처리 기다리는 줄에 그 프로그램을 줄세움
      • ready 상태인 다른 프로그램(프로세스)에게 CPU를 준다 (이것도 동기식이라는 거 주의!)
      • 현재 수업에서 얘기하고 있는 입출력 방식은 동기식 - 구현 2! (비동기식이 아님!)
  2. 비동기식 입출력: I/O 가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감.

⇒ 두 경우 모두 I/O의 완료는 인터럽트로 알려준다.

Thread

  • 쓰레드: CPU 수행단위가 여러개 있는 경우 이 하나를 쓰레드라고 함.
  • 프로세스 하나 주어지면 code/data/stack으로 구성된 주소공간이 프로세스마다 만들어짐. 이 프로세스를 관리하기 위해 운영체제 내부에 프로세스를 가져.
  • 현재 메모리의 어느 부분을 실행하고 있는지에 대해 해당 프로세스에서 해당 코드 부분을 PCB 내에 있는 프로그램 카운터가 가리키고 있음.!
  • 쓰레드
    • 하나의 프로세스에 해당하는 주소공간은 하나만 띄워놔.
    • 현재 CPU가 프로그램 코드 영역에서 어디를 실행하고 있는가에 대해 프로그램 카운터만 여러 개를 두는 것! 프로세스 하나에 CPU 수행 단위만 여러개를 두고 있는데, 이 수행단위가 쓰레드!
  • CPU 수행하려면(instruction) 코드 어느 부분을 실행하고 있는지를 가리키는 PC가 있어야 하고
  • 프로그램 실행되면서 메모리의 레지스터 값들을 쓰레드(CPU 수행단위)마다 현재 레지스터에 어떤 값을 넣고 PC가 코드 어느 부분을 가리키고 있는지 별도로 유지.
  • 코드 어느 부분을 실행하다가 함수를 호출하면 관련 정보를 스택에 쌓아. CPU 수행단위가 여러 개 있게 되면 스택을 별도로 둬야 함.
  • 프로세스 자원, 상태, 주소공간 모두 공유. 프로세스 하나에서 (주소공간 공유) 프로세스 상태 역시 하나이므로 공유.
    • 단, 쓰레드별로 따로 가지고 있는 건 스택 공간 &CPU 수행 관련 정보(PC, 레지스터)
  • 쓰레드: CPU 수행하는 단위.
  • 스레드 구성
    • pc
    • register set
    • stack
    • → 이것들만 쓰레드 별로 별도로 가져
  • 나머지 부분들은 하나의 프로세스 내에서 다른 쓰레드와 공유(=task)
    • 코드 섹션
    • 데이터 섹션
    • OS 자원 등
  • 하나의 프로세스 안에는 여러 개의 스레드가 있는데, task는 하나만 있음!
    • thread = lightweight process!
    • 프로세스 여러 개 두는 것보다 쓰레드 여러 개 두는 게 훨씬 가벼워
      • 프로세스가 입출력 요청 → 입출력 처리를 운영체제가 하니 사용자가 운체한테 요청.
      1. 동기식 입출력: I/O 요청 후 입출력 작업 완료된 후에 제어가 사용자 프로그램에게 넘어감.
        • 구현 1
          • I/O가 끝날 때까지 CPU 낭비
          • 매시점 하나의 I/O만 일어날 수 있음.
        • 구현 2
          • I/O가 완료될 떄까지 해당 프로그램에게서 CPU 뺏음.
          • I/O 처리 기다리는 줄에 그 프로그램을 줄세움
          • ready 상태인 다른 프로그램(프로세스)에게 CPU를 준다 (이것도 동기식이라는 거 주의!)
          • 현재 수업에서 얘기하고 있는 입출력 방식은 동기식 - 구현 2! (비동기식이 아님!)
      2. 비동기식 입출력: I/O 가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에게 즉시 넘어감.
      ⇒ 두 경우 모두 I/O의 완료는 인터럽트로 알려준다.
      • 쓰레드: CPU 수행단위가 여러개 있는 경우 이 하나를 쓰레드라고 함.
      • 프로세스 하나 주어지면 code/data/stack으로 구성된 주소공간이 프로세스마다 만들어짐. 이 프로세스를 관리하기 위해 운영체제 내부에 프로세스를 가져.
      • 현재 메모리의 어느 부분을 실행하고 있는지에 대해 해당 프로세스에서 해당 코드 부분을 PCB 내에 있는 프로그램 카운터가 가리키고 있음.!
      • 쓰레드
        • 하나의 프로세스에 해당하는 주소공간은 하나만 띄워놔.
        • 현재 CPU가 프로그램 코드 영역에서 어디를 실행하고 있는가에 대해 프로그램 카운터만 여러 개를 두는 것! 프로세스 하나에 CPU 수행 단위만 여러개를 두고 있는데, 이 수행단위가 쓰레드!
      • CPU 수행하려면(instruction) 코드 어느 부분을 실행하고 있는지를 가리키는 PC가 있어야 하고
      • 프로그램 실행되면서 메모리의 레지스터 값들을 쓰레드(CPU 수행단위)마다 현재 레지스터에 어떤 값을 넣고 PC가 코드 어느 부분을 가리키고 있는지 별도로 유지.
      • 코드 어느 부분을 실행하다가 함수를 호출하면 관련 정보를 스택에 쌓아. CPU 수행단위가 여러 개 있게 되면 스택을 별도로 둬야 함.
      • 프로세스 자원, 상태, 주소공간 모두 공유. 프로세스 하나에서 (주소공간 공유) 프로세스 상태 역시 하나이므로 공유.
        • 단, 쓰레드별로 따로 가지고 있는 건 스택 공간 &CPU 수행 관련 정보(PC, 레지스터)
      • 쓰레드: CPU 수행하는 단위.
      • 스레드 구성
        • pc
        • register set
        • stack
        • → 이것들만 쓰레드 별로 별도로 가져
      • 나머지 부분들은 하나의 프로세스 내에서 다른 쓰레드와 공유(=task)
        • 코드 섹션
        • 데이터 섹션
        • OS 자원 등
      • 하나의 프로세스 안에는 여러 개의 스레드가 있는데, task는 하나만 있음!
        • thread = lightweight process!
        • 프로세스 여러 개 두는 것보다 쓰레드 여러 개 두는 게 훨씬 가벼워
반응형