A program is a set of instructions that a computer uses to perform a specific function.
즉 컴퓨터에게 실행시킬 목적의 명령어들의 집합.
최대한 데이터를 공유하여 메모리 사용량을 줄이기 위해. Code는 같은 프로그램에서 같은 내용이기 때문에 따로 관리하여 공유한다. Stack과 Data를 나눈 이유는 스택 구조의 특성과 전역 변수의 활용성을 위해서이다.
우리가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령(machine instruction) 형태로 변환되어 저장되는 부분
전역 변수(global variables), 정적 변수, 배열 등 프로그램이 사용하는 데이터를 저장하는 부분
함수가 호출될 때 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 부분
'프로그램이 실행(program execution)되고 있다'는 것은
실행 중인 프로그램을 프로세스라고 한다.
실행 중인 프로그램이다. '실행 중'의 의미는 앞서 보았듯이
- 디스크에 존재해던 실행 파일이 메모리에 적재된다.
- 프로그램이 CPU를 할당받고 명령(Instructions)을 수행하고 있는 상태이다.
두 가지를 의미한다.
프로세스는 실행 되며 동적으로 할당되는 메모리인 힙(Heap)을 할당받는다.
프로세스는 실행중인 프로그램이므로 코드, 데이터, 스택으로 구성된 주소 공간을 갖는다. 프로그램마다 독자적으로 존재하는 주소 공간을 가상 메모리(Virtual Memory) 혹은 논리적 메모리(Logical Memory)라고 부른다. 운영체제 또한 자신의 주소 공간을 가진다.
가상 메모리는 실제 물리적 주소와 독립적으로 각 프로그램마다 독자적인 주소 공간을 가진다.
프로세스가 메모리에 적재 되어 실행중인 프로그램이라면 스레드는 다중 스레드 구조에서 프로세스의 작업 단위별로 나뉜 것이다. 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택으로 구성된다.
하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 병렬적으로 작업을 수행하는 것
메모리 침범 문제를 OS 차원에서 해결하여 안전하다.
각각 독립된 메모리 영역을 갖고 있어서 작업량이 많을 수록 오버헤드가 발생한다. Context Switching으로 인해 성능이 저하된다.
프로세스의 상태 정보를 저장하고 복원하는 일련의 과정이다. 프로세스는 독립된 메모리 영역을 할당받아 사용하므로 캐시 메모리 초기화와 같은 무거운 작업이 진행되었을 때 오버헤드가 발생할 문제가 존재한다.
스레드는 다중 스레드 구조에서 프로세스의 작업 단위별로 나뉜 것이다. 스레드 ID, 프로그램 카운터(PC), 레지스터 집합, 스택으로 구성된다.
같은 프로세스에 속한 다른 스레드와 코드, 데이터, 열린 파일이나 신호와 같은 운영체제 자원들을 공유한다.
물리적인 CPU의 스레드 개수. 실제 동시 실행 가능한 스레드의 개수이다.
8코어 16스레드 CPU의 16스레드가 이 물리 스레드를 의미한다.
위에서 말한 프로세스를 작업 단위별로 나눈 것. 리눅스에서 최대 스레드를 확인하기 위해서는
cat /proc/sys/kernel/threads-max
위 명령어로 알아볼 수 있다(프로세스 + 스레드 개수).
78921
하나의 응용 프로그램에서 여러 스레드를 구성해 각 스레드가 하나의 작업을 처리하는 것
안전성 문제
: 공유 메모리를 갖기 때문에 하나의 스레드가 Data 공간을 망가뜨리면 모든 스레드가 작동 불능하게 될 수 있다.What is a Program? - webopedia
What is a Program? - techtarget
gyoogle.dev
운영체제와 정보기술의 원리
운영체제(공룡책)