1. 프로세스 : 실행중인 프로그램
2. 스레드 : 프로세스 내 작업의 흐름
3. 프로세스와 컴파일 과정

- 전처리 : 소스코드의 주석을 제거 #include 등 헤더 파일을 병합하여 매크로를 치환
- 컴파일러 : 오류처리, 코드 최적화작업을 하며 어셈블리어로 변환한다.
- 어셈블러 : 어셈블리어를 기계어 형태의 오브젝트 코드로 해석해 주는 컴퓨터 언어 번역 프로그램. 기본 컴퓨터 명령어들을 컴퓨터 프로세서가 기본 연산을 수행하는데 사용할 수 있는 비트 패턴으로 변환
- 링커 : 프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적코드를 결합해 실행파일을 만듬
- 정적 라이브러리 : 프로그램 빌드 시 라이브러리가 제공하는 모든 코드를 실행 파일에 넣는 방식. 외부의존도 낮고, 메모리 효율성이 떨어짐.
- 동적 라이브러리 : 프로그램 실행 시 필요할 때만 DLL이라는 함수 정보를 통해 참조하는 방식. 메모리 효율성, 외부의존도 높음
4. 프로세스의 상태
프로세스 상태 이미지 참조
https://itwiki.kr/w/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4_%EC%83%81%ED%83%9C
IT위키
IT에 관한 모든 지식. 함께 만들어가는 깨끗한 위키
itwiki.kr
- 생성 상태 : fork() 또는 exec() 함수를 통해 생성. 이때 PCB가 할당된다.
- 대기 상태 : CPU스케줄러로부터 CPU소유권이 넘어오기를 기다리는 상태
- 대기 중단 상태 : 메모리부족으로 일시 중단된 상태
- 실행 상태 : CPU소유권과 메모리를 할당 받고 인스트럭션을 수행 중인 상태를 의미한다. CPU burst가 일어났다고도 표현
- 중단 상태 : 어떤 이벤트 발생 이후 기다리며 프로세스가 차단된 상태. I/O 디바이스에 의한 인터럽트로 이런현상이 많이 발생
- 일시 중단 상태 : 대기중단과 유사
- 종료 상태 : 메모리와 CPU 소유권을 모두 놓고가는 상태를 말한다. 자연종료도 있지만 부모 프로세스가 자식 프로세스를 강제시키는 비자발적 종료(abort)로 종료되는 것도 있다.
- fork() : 부모 프로세스의 주소공간을 그대로 복사, 새로운 자식 프로세스를 생성(주소공간만 복사 부모의 비동기 작업등을 상속하지는 않는다.)
- exec() : 새로운 프로세스 생성
- 인스트럭션 : 컴퓨터에게 일을 시키는 단위. 기계어로 이루어짐. 명령부와 처리부로 구성
5. 프로세스의 메모리 구조

스택 | 지역,매개변수, 함수가 저장됨. 컴파일 시에 크기가 결정. 동적이다. 스택 영역은 재귀함수를 호출하면서 동적으로 크기가 늘어날 수 있는데, 이때 힙과 스택의 메모리 영역이 겹치면 안되기 때문에 힙과 스택사이의 공간을 비워 놓는다. |
힙 | 런타임시 크기 결정. 동적이다. ex) 벡터 |
데이터 영역 | 전역,정적변수 저장. BSS, Data 영역으로 나뉨. BSS 영역은 초기화가 되지 않은 변수가 0으로 초기화되어 저장되며 Data영역은 0이 아닌 다른값으로 할당된 변수들이 저장된다. 정적이다. |
코드 영역 | 프로그램에 내장되어 있는 소스코드가 들어가는 영역. 수정불가한 기계어로 저장되있으며 정적이다. |
6. PCB(Process Control Block) : 운영체제에서 프로세스에 대한 메타데이터를 저장한 '데이터'를 말한다. 프로세스의 중요 정보를 포함하기에 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리된다.
7. PCB의 구조
- 프로세스 스케줄링 상태 : '준비', '일시중단' 프로세스가 CPU에 대한 소유권을 얻은 이후 또는 이후 경과된 시간과 같은 기타 스케줄링 정보
- 프로세스 ID : 프로세스ID, 해당 프로세스의 자식 프로세스 ID
- 프로세스 권한 : 컴퓨터 자원 or I/O디바이스에 대한 권한 정보
- 프로그램 카운터 : 프로세스에서 실행해야 할 다음 명령어의 주소에 대한 포인터
- CPU 레지스터 : 프로세스를 실행하기 위해 저장해야 할 레지스터에 대한 정보
- CPU 스케줄링 정보 : CPU 스케줄러에 의해 중단된 시간등에 대한 정보
- 계정정보 : 프로세스 실행에 사용된 CPU 사용량, 실행한 유저의 정보
- I/O 상태정보 : 프로세스에 할당된 I/O 디바이스 목록
8. 컨텍스트 스위칭
- 정의 : PCB를 교환하는 과정. 한 프로세스에 할당된 시간이 끝나거나 인터럽트에 의해 발생. 스위칭 시 유휴시간이 발생
- 비용 : 스위칭 시 프로세스가 가지고 있는 메모리 주소가 그대로 있으면 잘못된 주소 변환이 생기므로 캐시 클리어 과정을 겪게되고 이 때문에 캐시미스가 발생.
- 스레드에서의 컨텍스트 스위칭 : 스레드는 스택 영역을 제외한 모든 메모리를 공유하기에 스레드 컨텍스트 스위칭의 경우 비용이 더 적고 시간도 더 적게 걸린다.
9. 멀티프로세싱
- 개념 : 여러개의 프로세스로 동시에 두 가지 이상의 일을 수행할 수 있는 것. 특정 프로세스의 메모리에 문제가 발생되더라도 다른 프로세스를 이용해 처리할 수 있으므로 신뢰성이 높다.
- 웹브라우저
브라우저 프로세스 | 주소표시줄, 북마크 막대, 뒤로가기, 아픙로 가기 버튼등을 담당. 네트워크 요청이나 파일접근 같은 권한을 담당 |
렌더러 프로세스 | 웹사이트가 보이는 부분의 모든것을 제어 |
플러그인 프로세스 | 웹사이트에서 사용하는 플러그인을 제어 |
GPU 프로세스 | GPU를 이용해 화면을 그리는 부분을 제어 |
- IPC(Inter Process Communication) : 프로세스끼리 데이터를 주고받고 공유데이터를 관리하는 메커니즘
- IPC의 종류
공유메모리 | 여러 프로세스에 동일한 메모리 블록에 대한 접근 권한이 부여되어 프로세스가 서로 통신할 수 있도록 공유버퍼를 생성하는 것. ->각 프로세스의 메모리를 다른 프로세스가 접근 할 수 없지만 공유 메모리를 통해 하나의 메모리로 공유할 수 있다.불필요한 데이터 복사의 오버헤드가 발생하지 않아 가장 빠르며 같은 메모리 영역을 여러 프로세스가 공유하기에 동기화가 필요하다. |
파일 | 디스크에 저장된 데이터 또는 파일 서버에서 제공한 데이터를 말한다. 이를 기반으로 프로세스간 통신을 한다. |
소켓 | 동일한 컴퓨터의 다른 프로세스나 네트워크의 다른 컴퓨터로 네트워크 인터페이스를 통해 전송하는 데이터를 의미하며 TCP와 UDP가 있다. |
익명 파이프 | 프로세스간에 FIFO방식으로 읽히는 임시 공간인 파이프를 기반으로 데이터를 주고 받으며, 단방향 방식의 읽기 전용, 쓰기 전용 파이프를 만들어서 작동하는 방식. 부모<->자식 프로세스 간에만 사용 가능하며 타 네트워크상에선 사용불가 |
명명된 파이프 | 파이프 서버와 하나 이상의 파이프 클라이언트 간의 통신을 위한 명명된 단방향 또는 이중 파이프를 말한다.클라이언트/서버 통신을 위한 별도의 파이프를 제공하며, 여러파이프를 동시에 사용할 수 있다. |
메시지 큐 | 메시지를 큐 데이터 구조형태로 관리하는 것을 의미한다. 커널의 전역변수 형태 등 커널에서 전역적으로 관리되며 다른 IPC방식에 비해서 사용방법이 매우 직관적이고 간단하며 다른 코드의 수정없이 단지 몇줄의 코드를 추가 시켜서 간단하게 메시지큐에 접근할 수 있다. |
10. 스레드와 멀티 스레딩
- 스레드 : 프로세스의 실행 가능한 가장 작은 단위. 코드, 데이터, 스택, 힙을 각각 생성하는 프로세스와는 달리 스레드는 코드, 데이터, 힙을 서로 공유한다.
- 멀티스레딩 : 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기에 효율성이 높다. 다만 공유된 부분이 있기때문에 한 스레드에 문제가 생기면 다른 스레드에 영향을 끼치고, 스레드로 이루어져있는 프로세스에 영향을 준다. ex) 웹 브라우저의 렌더러 프로세스
11. 공유자원과 임계영역
- 공유자원 : 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수등을 의미.
- 경쟁상태(race condition): 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황
- 임계영역 : 공유 자원에 접근할 때 순서등의 이유로 결과가 달라지는 영역. 잠금이라는 메커니즘을 이용한 뮤텍스, 세마포어, 모니터로 해결가능(상호배제, 한정 대기, 융통성이라는 조건을 만족한다.)
- 임계영역 해결 방법
뮤텍스 | 공유자원을 사용하기 전에 설정하고 사용한 후에 해제하는 잠금이다. 잠금이 설정되면 다른 스레드는 잠긴 코드 영역에 접근할 수 없다. |
세마포어 | 일반화된 뮤텍스. 간단한 정수 값과 두 가지 함수 wait & signal로 공유자원에 대한 접근을 처리한다. - 바이너리 세마포어 : 0,1 두가지 값만 가질 수 있는 세마포어 - 카운팅 세마포어 : 여러개의 값을 가질 수 있는 세마포어이며, 여러자원에 대한 접근을 제어하는데 사용 |
모니터 | 둘 이상의 스레드나 프로세스가 공유자원에 안전하게 접근할 수 있도록 공유자원을 숨기고 해당 접근에 대한 인터페이스만 제공한다. 모니터큐를 통해 공유자원에 대한 작업들을 순차적으로 처리. 세마포어보다 구현이 용이하며 모니터에서 상호배제는 자동인 반면, 세마포어에서는 상호배제를 명시적으로 구현해야한다. |
12. 교착상태(deadlock) : 두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태
- 원인
상호배제 | 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들은 접근이 불가능하다. |
점유대기 | 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태 |
비선점 | 다른 프로세스의 자원을 강제적으로 가져올 수 없다. |
환형대기 | 프로세스는 A는 프로세스 B의 자원을 요구하고, 프로세스 B는 프로세스 A의 자원을 요구하는 등 서로가 서로의 자원을 요구하는상태 |
- 해결 방법
1. 초기 자원 할당 시 조건이 성립되지 않도록 설계 |
2. 교착상태 가능성이 없을 때만 자원 할당되며, 프로세스당 요청할 자원들의 최대치를 통해 자원 할당 가능여부를 파악하는 '은행원 알고리즘'을 사용 |
3. 교착 상태가 발생하면 사이클이 있는지 찾아 보고 이에 관련된 프로세스를 한 개씩 지운다. |
4. 교착 상태는 매우 드물게 일어나고 처리하는 비용이 더 크기에 발생 시, 사용자가 작업을 종료한다.(현대 운영체제의 방법) |
[OS] 프로그램과 프로세스의 차이, 컴파일(Compile), CPU 구성요소
프로세스란? 프로그램과 프로세스는 똑같은거 아닌가? 프로그램을 실행시키면 프로세스가 된다. 프로세스 = 실행 중인 프로그램 목차 프로그램과 프로세스 프로세스 제어목록(PCB, Process Control Bl
pongsi.tistory.com
https://zangzangs.tistory.com/107
[OS] 프로세스 메모리 구조 (코드, 데이터, 스텍, 힙)
프로세스 메모리 구조 (코드, 데이터, 스텍, 힙) 프로그램의 실행 프로그램의 실행은 두가지 중요한 의미를 가진다. 파일 시스템에 존재하던 실행파일이 메모리에 적재된다는 의미 프로그램이 CP
zangzangs.tistory.com
'Computer Science > 운영체제' 카테고리의 다른 글
CPU 스케줄링 알고리즘 (0) | 2022.10.05 |
---|---|
메모리 (0) | 2022.09.29 |
운영체제, 컴퓨터의 개념 및 구조 (0) | 2022.09.28 |