프로세스, 스레드

hana jeong·2023년 3월 24일
0

프로그램이란?
어떤 작업을 위해 운영체제 위에서 실행할 수 있는 파일
(ex: 크롬, 카톡, 슬랙 등)

프로세스란?
운영체제 위에서 실행중인 프로그램
프로그램 명령어와 데이터들이 메모리에 올라오고 실행 중 또는 실행 대기 중인 상태

프로그램이 프로세스가 되기 위해서는 다음과 같은 일이 생김
-> 프로세스는 독립된 메모리를 할당받음. 프로세스가 할당받은 메모리를 관리하기 위해 관리하는 공간이 있는데 이를 프로세스 주소 공간이라고 함. 프로세스 주소 공간에는 code, data, heap, stack* 으로 구성됨

*
code : 코드 자체를 구성하는 메모리 영역(실행명령 포함)
data : 정적 변수, 전역 변수
heap : 동적 메모리 영역(동적 할당 시 사용 new(), malloc()등)
stack : 지역 변수, 함수 매개변수, 반환 값 등 일시적인 데이터
기본적으로 프로세스마다 최소 1개의 스레드(main thred를 가짐)

-> 해당 프로세스에 대한 정보를 담고 있는 PCB 블럭 * 생성

  • PCB (process control block)
    프로세스를 제어하기 위한 정보 모음


출처 : https://www.tutorialspoint.com/what-is-process-control-block-pcb

프로세스 상태
프로세스 상태(신규, 준비됨, 실행 중, 대기 중 또는 종료됨)를 지정

프로세스 번호
특정 프로세스의 유니크한 고유 번호

프로그램 카운터
프로세스에서 실행해야 하는 다음 명령어의 주소가 포함

레지스터
프로세스에서 사용하는 레지스터를 지정함
누산기, 인덱스 레지스터, 스택 포인터, 범용 레지스터 등이 포함될 수 있음

열린 파일 목록
프로세스와 관련된 다양한 파일

CPU 스케줄링 정보
프로세스 우선순위, 스케줄링 대기열에 대한 포인터 등은 PCB에 포함된 CPU 스케줄링 정보 여기에는 다른 스케줄링 매개변수도 포함될 수 있음

메모리 관리 정보
메모리 관리 정보에는 사용된 메모리 시스템에 따라 페이지 테이블 또는 세그먼트 테이블이 포함.
기본 레지스터, 제한 레지스터 등의 값도 포함됩니다.

I/O 상태 정보
프로세스에서 사용하는 I/O 장치 목록, 파일 목록 등이 포함

계정 정보
시간 제한, 계정 번호, CPU 사용량, 프로세스 번호 등은 모두 PCB 계정 정보의 일부


프로세서란?
프로세스가 동작* 될 수 있도록 하는 하드웨어(cpu)

*동작 -> 프로그램들의 자원들이 메모리에 올라오고 실행되어야 할 코드의 메모리 주소를 cpu의 레지스터로 올리는 것

cpu(프로세서)는 한 번에 하나의 프로세스만 실행할 수 있음
-> 근데 어떻게 우리는 멀티태스킹을 할 수 있을까??
-> 운영체제가 짧은 시간에 수십번에서 수천번 실행할 프로세스를 교체하고 있기 때문에 우리는 동시에 여러 개의 작업이 실행되고 있다고 느끼는 것


스레드란?
프로세스 내에서 실행되는 작업 흐름의 단위
한 프로세스 내에서 구분지어진 실행단위
다수의 스레드가 있을 경우 공유되는 자원이 있음(스택빼고 다 공유)

멀티 프로세스 vs 멀티 스레드
둘 다 어플리케이션에 대한 처리방식의 일종

예를 들면 다수의 사용자가 로그인을 요청하는 상황을 가정
한 프로세스는 매번 하나의 로그인만 처리할 수 있기 때문에 동시에 처리x
그래서 부모프로세스가 fork하여 자식 프로세스를 만들어 일을 처리하게끔 함

프로세스와 스레드의 장단점

프로세스

  • 각 프로세스는 독립적인 메모리 공간을 가짐
  • IPC를 사용한 통신
  • 자원 소모적, 개별 메모리 차지
  • 컨텍스트 스위칭 비용이 큼
  • 동기화 작업이 필요하지 않음

스레드

  • 스레드끼리 긴밀하게 연결됨
  • 공유된 자원으로 통신 비용 절감
  • 공유된 자원으로 메모리가 효율적임
  • 컨텍스트 스위칭 비용이 적음
  • 공유 자원 관리를 해야함
  • 한 스레드에 문제가 생기면 전체 프로세스에 영향이 감

참고로 유튜브 우아한테크 테코톡(https://youtu.be/1grtWKqTn50, https://youtu.be/DmZnOg5Ced8)과 쉬운코드(https://youtu.be/QmtYKZC0lMU)의 영상 내용들을 정리한 글입니다
혹시라도 문제가 있을 시 말씀해주세요

profile
https://developer-hh.tistory.com 로 옮깁니다

0개의 댓글