본문 바로가기
멀티코어 프로그래밍/Basic

프로세스와 스레드

by 기리의 개발로그 2022. 4. 4.

프로세스(Process)와 스레드(Thread)

프로세스

  • 실행되고 있는 컴퓨터 프로그램의 인스턴스

  • 실행되고 있는 명령어의 흐름

  • OS에 의해 추상화 됨

  • 레지스터, 메모리(코드, 데이터, 스택, 힙), I/O 상태, 시그널 관리 정보 등을 가짐


관리자 모드와 사용자 모드

  • 관리자 모드

    • 관리자 모드에서는 모든 명령들이 실행될 수 있음
    • OS 커널이 동작하는 모드
  • 사용자 모드

    • 일부 명령어만 사용 가능
    • OS 커널을 제외한 나머지 모든 소프트웨어들이 동작하는 모드

시스템 콜(System Call)

  • 사용자 모드에서 동작하는 프로그램이 OS에게 서비스를 요청하는 방법

    • 일반적으로 트랩(trap)을 이용하여 구현함
    • 프로그램이 트랩 명령어를 실행하면 트랩이 발생하여 커널 모드로 전환됨
    • 커널은 트랩을 처리하고 제어를 다시 프로그램에게 반환홤

단일 프로그래밍과 멀티 프로그래밍

  • 단일 프로그래밍

    • 한 번에 하나의 프로세스만 동작
    • ex) DOS
    • 자원 활용률이 낮음
  • 멀티 프로그래밍

    • 한 번에 다수의 프로세스가 동작
    • Window, Unix, Linux 등의 운영체제
    • 자원 활용률을 높일 수 있음

가상 메모리

  • OS에 의해 시스템의 물리 메모리가 추상화 됨
  • 각 프로세스에게 자신이 메모리를 독점적으로 사용한다는 환상 제공
  • 각 프로세스에게 시스템의 가용 물리 메모리보다 더 큰 메모리를 가지고 있다는 환상 제공
  • 논리(가상) 주소( Logical, virtual address)
    • CPU에 의해 생성된 주소
    • 프로그램에 의해 생성된 모든 논리 주소의 집합
  • 물리 주소
    • 물리 메모리의 주소
    • 물리 주소 공간
      • 논리 주소에 대응하는 모든 물리 주소의 집합
  • OS의 가상 메모리는 가상 주소와 물리 주소간의 매핑을 담당
  • 빠른 가상 주소와 물리 주소간의 변환을 위해 하드웨어인 MMU(Memory Management Unit)를 이용


프로세스간 통신

  • 프로세스간 통신은 공유 주소공간에 읽기/쓰기를 통해 이루어 짐
  • 다른 방법으로는 IPC가 있음
  • 참고자료


Concurrency

  • 컴퓨터 시스템은 일반적으로 멀티 프로그래밍 시스템

    • 커널 프로세스는 시스템 코드를 실행
    • 사용자 프로세스는 사용자 코드를 실행
    • 모든 프로세스는 하나의 시스템에서 동시에 실행할 수 있음
  • Concurrency

    • 한 프로세스의 명령어들은 다른 프로세스의 명령어들과 섞여 실행됨
    • 문맥교환으로 구현

문맥 교환(Context Switching)

  • 다른 프로세스의 명령어를 실행하기 위해 CPU가 한 프로세스에서 다른 프로세스로 전환하는 과정

    • OS의 CPU 스케줄러가 담당
  • 프로세스 문맥(Context)은 프로세스의 계속적인 수행을 위해 저장되어야 하는 정보

  • 문맥교환

    • OS는 현재 프로세스 p의 문맥을 저장하고 다른 프로세스 q의 문맥을 복구한 후 q로 제어권을 전달
    • q는 제어권을 전달받고 이전에 멈춘 위치에서 이어서 실행

프로세스 상태 전이

  • 프로그램이 실행될 때 해당 프로세스의 상태 변화
    • 실행 중(running) : CPU를 사용 중
    • 준비(ready) : 사용 가능한 CPU가 없음
    • 블록됨(blocked) : 특정 이벤트(I/O 등)가 발생하기를 기다림


선점형과 협력형 멀티태스킹

  • 선점형 멀티태스킹
    • 작업의 선점을 허용
    • 모든 프로세스는 일정 양의 CPU 시간을 할당받음
    • 현대의 거의 모든 운영체제가 선점형 멀티태스킹을 지원
  • 협력형 멀티태스킹
    • 각 작업은 CPU와 같은 시스템 자원이 더 이상 필요하지 않을 경우 명시적으로 자원을 반환하도록 프로그램됨
    • 거의 사용되지 않음
반응형

'멀티코어 프로그래밍 > Basic' 카테고리의 다른 글

캐시 일관성과 거짓 공유  (17) 2022.04.07
스레드  (22) 2022.04.06
스레드 스케줄링  (29) 2022.03.31
Make / Makefile  (41) 2022.03.30
gcc 컴파일러  (13) 2022.03.29

댓글