프로그램이란?
어떤 작업을 위해 운영체제 위에서 실행할 수 있는 파일
(ex: 크롬, 카톡, 슬랙 등)
프로세스란?
운영체제 위에서 실행중인 프로그램
프로그램 명령어와 데이터들이 메모리에 올라오고 실행 중 또는 실행 대기 중인 상태
프로그램이 프로세스가 되기 위해서는 다음과 같은 일이 생김
-> 프로세스는 독립된 메모리를 할당받음. 프로세스가 할당받은 메모리를 관리하기 위해 관리하는 공간이 있는데 이를 프로세스 주소 공간
이라고 함. 프로세스 주소 공간에는 code, data, heap, stack* 으로 구성됨
*
code : 코드 자체를 구성하는 메모리 영역(실행명령 포함)
data : 정적 변수, 전역 변수
heap : 동적 메모리 영역(동적 할당 시 사용 new(), malloc()등)
stack : 지역 변수, 함수 매개변수, 반환 값 등 일시적인 데이터
기본적으로 프로세스마다 최소 1개의 스레드(main thred를 가짐)
-> 해당 프로세스에 대한 정보를 담고 있는 PCB 블럭 * 생성
출처 : 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하여 자식 프로세스를 만들어 일을 처리하게끔 함
프로세스와 스레드의 장단점
프로세스
스레드
참고로 유튜브 우아한테크 테코톡(https://youtu.be/1grtWKqTn50, https://youtu.be/DmZnOg5Ced8)과 쉬운코드(https://youtu.be/QmtYKZC0lMU)의 영상 내용들을 정리한 글입니다
혹시라도 문제가 있을 시 말씀해주세요