본문 바로가기

카테고리 없음

운영체제 요약 정리 (1)

프로세스의 생성과 복사

프로세스는 프로그램 실행할 때 생성된다. 사용자가 프로그램 실행 시, 운영체제가 프로그램을 메모리로 가져와 코드 영역에 넣고, 프로세스 제어 블록을 생성한다.

메모리에 1. 데이터 영역 2. 스택 영역을 확보 후, 프로세스 실행한다.

 

프로세스 새로 생성 뿐 아니라, 복사 하는 방법도 있다. 매번 새로 만드는 것보다 복사할 경우 더 빠르다.

 

fork() 시스템 호출

fork() 시스템 호출은 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수다.

커널에서 제공하는 함수. 일종의 시스템 호출이다. 실행 중인 프로세스와 똑같은 프로세스 만들어짐.

A프로그램 실행 중에, A 프로그램을 하나 더 실행 시, 운영체제는 새로운 A를 실행하는게 아닌, fork() 시스템 호출을 사용하여 복사한다.

 

크롬에서 ctrl + n 을 누르면, 새로운 크롬 실행이 아닌, 크롬을 복사한다.

 복사 시, 기존 프로세스는 부모 프로세스, 새 프로세스는 자식 프로세스가 된다. 부모- 자식 관계로 연결된다.

 

프로세스 전환

fork() 시스템 호출 후, exec() 시스템 호출로 복사된 프로세스를 변경할 수 있다. 

exec() 시스템 호출은 기존 프로세스를 새로운 프로세스로 전환하는 함수다.

exec() 시스템 호출은 - 프로세스는 그대로 둔 채, 용만 바꾸는 시스템 호출로, 현재의 프로세스가 완전히 다른 프로세스로 전환된다.

 

exec() 시스템 호출 왜 사용 ?

프로세스 구조체를 재활용하기 위함이다. 새로운 프로세스는 제어 블록을 만들고, 메모리의 자리를 확보하는 과정이 있다. 또한 프로세스 종료 후 사용한 메모리를 청소하는 garbage collection을 하기 위해 부모-자식 관계를 만들어야 한다. 

하지만 exec()을 사용하면 이미 만들어진 프로세스 제어 블록, 메모리 영역, 부모-자식 관계를 그대로 사용할 수 있다.

 

컴퓨터 느려지는 현상

컴퓨터를 오래 켜둘 경우, 각종 프로세스와 좀비 프로세스가 메모를 차지한다. 이러한 프로세스들이 메모리에 남아 다른 작업에 영향을 미친다. 이런 경우 재부팅 시 더 빨라진다.

 

 

스레드

thread 스레드란?

cpu 스케줄러가 cpu에 전달하는 일 하나를 스레드라고 한다. 하나의 프로세스에 여러개의 스레드가 존재하기도 한다.

프로세스가 생성 시, cpu 스케줄러는 프로세스가 해야 할 일을 cpu에 전달하고 실제 작업은 cpu가 한다. cpu 스케줄러가 cpu에 전달하는 일 하나가 스레드이다. CPU가 처리하는 작업의 단위는 프로세스에서 전달받은 스레드이다. 운영체제 입장에서 작업 단위는 프로세스이고, CPU입장에서 작업 단위는 스레드 이다. 프로세스 입장에서 스레드란, 프로세스의 코드에 정의된 절차에 따라 CPU에 작업 요청을 하는 실행 단위이다.

 

작업 크기 비교:

작은 단위의 operation(일)이 모여 task(작업) 이 된다.

job > task > operation

처리 > 프로세스 > 스레드

여러 개의 프로세스를 모아 한꺼번에 처리하는 방법을 일괄 작업(Batch Job)이라 한다.

 

프로세스 스레드 차이

프로세스와 스레드는 서로 미치는 영향이 다르다. 프로세스끼리는 약하게 연결되어 있고, 스레드끼리는 강하게 연결되어 있다. 

 

용어 정리:

멀티 태스킹: 

운영체제가 cpu에게 작업을 줄 때 시간을 잘개 나누어 배분하는 기법

 

멀티 스레드:

프로세스 내 작업을 여러개의 스레드로 분할하여 작업 부담을 줄이는 프로세스 운영 기법

 

멀티 프로세싱:

cpu를 여러개 사용하여 여러개의 스레드를 동시에 처리하는 작업 환경

 

cpu 멀티스레드

한 번에 하나씩 처리해야하는 스레드를 파이프라인 기법을 이용해 동시에 여러 스레드를 처리하도록 만든 병렬 처리 기법

 

동적 할당 영역과 시스템 호출

프로세스의 동적 할당

프로세스의 영역 구분:

코드 영역, 데이터 영역, 스택 영역, 힙 영역

코드 영역은 프로그램의 본체가 있는 곳이다.

데이터 영역은 프로그램이 사용하려고 정의한 변수와 데이터가 있는 곳이다.

스택 영역과 힙 영역은 프로세스가 실행되는 동안 만들어 지는 영역으로, 크기가 줄고 늘어나기 때문에, 동적 할당 영역이다. 

코드, 데이터 영역은 정적 영역이다.

 

 

쉽게 배우는 운영체제 참조