TIL 7/12

HiroPark·2023년 7월 12일
0

프로세스와 스레드의 차이

  • 프로세스와 스레드 모두 실행의 독립적인 시퀀스

  • 차이점 : 같은 프로세스 안의 스레드들은 shared memory space 안에서 동작

  • 반대로 프로세스는 Separate memory memory space 안에서 동작

Process

  • 실행중인 프로그램
    • Disk → 메모리 적재
    • OS로부터 address space, file, memory 등을 할당받음.
    • 프로세스 스택 : 함수의 매개변수, 복귀 주소, 로컬 변수 등의 임시자료
    • 데이터 섹션 : 데이터 섹션
    • : 프로세스 실행 중에 동적으로 할당
  • PCB : 프로세스에 대한 중요한 정보를 저장
    • 프로세스의 생성과 동시에 고유한 PCB가 생성됨

    • 프로세스 전환 이 발생하면 진행하던 작업을 PCB에 저장후 CPU 반환 → 다시 CPU 할당받으면 PCB에 저장된 내용을 불러와 다시 작업 수행

      PCB 저장 정보 → PintOS에서는 Struct thread 자체가 PCB

→ tid, status, 이름, priority, wakeup틱, elem, 기다리는 lock에 대한 포인터, donation정보, parent_if, child_list(왜필요하더라?), child_elem, file descriptor table, Supplemental page table, stack bottom, rsp_stack , 스위칭을 위한 intr_frame 등을 요소로 가짐

  • PCB는 연결리스트로 관리되며, 커널 힙에 존재한다 = ready_list, sleep_list에 element로써 쓰레드 구조체를 넣음
    • 프로세스가 시스템콜을 하면, 유저 프로세스가 유저 영역에 있다가 커널 영역에서 수행된다 = 유저 쓰레드는 각자의 Virtual Adress로써 커널영역, 유저영역을 가지고 있고, syscall이 호출되면 해당 쓰레드의 PC값이 커널 영역으로 JUMP하는 것일 뿐, 쓰레드가 바뀌는 것이 아니다.

PCB

운영체제가 프로세스를 관리하기 위해 프로세스당 유지하는 정보

  1. OS가 관리상 사용하는 정보
    1. process 상태, PID, 우선순위
  2. CPU 수행 관련 하드웨어 값
    1. PC, registers
  3. 메모리 관련
    1. code, data, stack의 위치 정보
  4. 파일 관련
    1. Open file Descriptors

⇒ 운영체제 커널의 주소 공간에서 PCB를 프로세스마다 가지고 있다

Threads

  • 프로세스의 실행 단위
  • 프로세스 내부의 주소공간이나 자원을 공유
  • 같은 프로세스의 다른 쓰레드와 code, data, open file 등의 자원을 공유
  • 스택을 쓰레드마다 독립적으로 할당
    • 스택에 함수 호출시의 인자, 되돌아 가는 주소값, 함수 내 선언된 변수 등을 저장함
    • 이러한 스택 공간이 독립적이기 때문에 독립적인 함수 호출이 가능함 ⇒ 독립적인 실행 흐름이 추가되는 것
    • 마찬가지로, PC Register를 스레드마다 독립적으로 할당해서
      • 스레드의 명령어가 어느부분까지 수행했는지를 기록

Simultaenous VS Concurrent

  • Simultaneous는 실제로 여러일이 동시에 벌어지는거고
  • Concurrent는 동시에 벌어지는 듯 보이지만, 실제로는 엄청 빠르게 switching 중인거임

그래서, single core만 있으면 concurrent execution만이 가능하다.

그런데 multiple core가 있다면 쓰레드들을 각각 코어에 올려서 simultaneous 한 실행이 가능하다.

이들을 Schedule 하는것은 OS의 일이다.

profile
https://de-vlog.tistory.com/ 이사중입니다

0개의 댓글