[OS] 프로세스/ 스레드

East Silver·2021년 12월 25일
0

프로세스

  • 실행 중인 프로그램
  • 프로세스당 최소 1개의 스레드(메인 스레드)를 가지고 있다.
  • 실행되기 위해서 필요한 자원들
    • CPU time
    • memory
    • files
    • I/O devices
  • 프로세스 구성
    • Stack 함수에서 사용되는 데이터 정보를 저장한다. 즉, 함수 매개변수(Parameter), 함수 내부에서 사용되는 지역변수, 복귀 주소 (return addresss)가 저장된다. 함수 호출이 완료되면 메모리 해제된다.
    • Heap 동적으로 할당하는 메모리
    • Data 전역 변수, static 변수 저장한다. 프로그램 시작 시 동시 할당되고, 종료 시 해제 된다.
    • Text 프로세스가 실행하는 코드 저장

문맥 교환(Context Switch)

Context: CPU 수행 상태를 나타내는 하드웨어 문맥
예를들어 한 사람의 문맥은 키, 학력등의 정보이다.

프로세스 제어 블록(Process Control Block, PCB)

  • 운영체제는 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB를 생성 한다.
  • 특정 프로세스에 대한 중요한 정보를 저장하고 관리하기 위한 운영체제의 자료구조
    • 구조체의 형태로 관리
  • PCB 에 저장되는 정보
    • 프로세스 식별자(Process ID, PID) : 프로세스 식별번호
    • 프로세스 상태 : new, ready, running, waiting, terminated 등의 상태를 저장
    • 프로그램 카운터(pc) : 프로세스가 다음에 실행할 명령어의 주소
    • CPU 레지스터
    • CPU 스케쥴링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 등
    • 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블 등과 같은 정보를 포함
    • 입출력 상태 정보 : 프로세스에 할당된 입출력 장치들과 열린 파일 목록
    • 어카운팅 정보 : 사용된 CPU 시간, 시간제한, 계정번호 등

  • 프로세스가 작업을 마치고 종료되면 해당 프로세스는 메모리에서 삭제되고 PCB 역시 폐기된다.

스레드(Thread)

  • 프로세스의 실행 단위

  • 구성

    • 스레드 ID/ 프로그램 카운터/ 레지스터 집합/ 스택
  • Code, Data, Heap 영역은 공유

  • 레지스터, 스택, 프로그램 카운터는 독립적으로 사용

  • 스택을 스레드마다 독립적으로 할당하는 이유

    스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소값 및 함수 내에서 선언하는 변수 등을 저장하기 위해 사용되는 메모리 공간이므로 스택 메모리 공간이 독립적이라는 것은 독립적인 함수 호출이 가능하다는 것이고 이는 독립적인 실행 흐름이 추가되는 것이다. 따라서 스레드의 정의에 따라 독립적인 실행 흐름을 추가하기 위한 최소 조건으로 독립된 스택을 할당한다.

  • PC Register 를 스레드마다 독립적으로 할당하는 이유

    PC 값은 스레드가 명령어의 어디까지 수행하였는지를 나타나게 된다. 스레드는 CPU 를 할당받았다가 스케줄러에 의해 다시 선점당한다. 그렇기 때문에 명령어가 연속적으로 수행되지 못하고 어느 부분까지 수행했는지 기억할 필요가 있다. 따라서 PC 레지스터를 독립적으로 할당한다.

  • 장점

    • 응답성이 빠르다

    • 자원 공유

    • 경제적이다

    • cpu가 여러대일때 스레드의 장점

profile
IOS programmer가 되고 싶다

0개의 댓글