CS/System Programming (2021-2)

[시스템 프로그래밍] Process : 프로세스

샤아이인 2022. 1. 19.

내가 공부한후 후에도 참고할겸 작성하는 글 입니다. 참고로 저는 WSL2 환경에서 시스템프로그래밍을 공부중 입니다.

1. Process란 무엇인가?

우선 전공서적에서 찾아보면 process는 Operating system's abstraction for a running program이라 나와있는대, 이를 그대로 직역하면 "운영체제에서의 실행중인 프로그램을 추상화 한것" 이라 번역할수 있겠다.

 

간단히 설명을 덧붙혀 보면 우리가 사용하는 윈도우os상에서 Excel 프로그램(program)을 실행하면 하나의 실행중인 Excel process가 생성된다.

당연히 여러 Excel 창을 띄워놓고 동시에 멀티테스킹을 하는것은 여러 process들이 동시에 실행중이라는 것 이다.

혹 객체지향프로그래밍인 Java나 Python을 해봤다면 program은 class이고 process는 class로부터 생성되는 instance라 생각하면 편할것이다.

 

2. Program? Process? Processor?

초보자의 경우 위의 3가지 단어부터 혼동될 수 있다.

각각에 대하여 우선 살펴보면 process에 대한 이해가 한결 더 다가올 것이다.

 

1) Program : 간단히 하나의 executable(실행가능한) file이다. 여기서 실행가능까지는 이해가가더라고 파일이라는 의미가 안 와닿을수 있는대 이는 잠시 Linux에서의 파일의 개념을 빌려와 "모든것이 파일이다" 라고 생각하는것이 편할것 이다.

 

2) Process : program이 실행될경우 생성되는 동작중인상태의 program을 추상화 시켜 process라 부른다.

위에서 추상화 라는 단어가 나왔는대 이러한 동작중인 프로그램의 내부원리를 모르더라도 사용하거나, 하나의 덩어리로 생각하기위해 개념을 추상화 시키는 것 이다.

 

3) Processor : 간단히 CPU이다.

 

3. Context switch?

- Context switch는 CPU자원을 여러 process가 공유할수 있도록 시분할을 OS가 지원해주는 것 이다.

- 아니그럼 어떻게 여러개의 Excel이 동시에 실행되고 있는 것 일까? 다시말해 어떻게 여러개의 process가 동시에 실행되는것인가?

 

이를 위해 Context switch라는 방식이 사용되는대 그전에 우선 context에 대하여 먼저 알아보자.

 

Context

프로그램을 compile하거나, 실행할 때 현재 어느 지점의 코드가 실행되는가? 또는 실행파일을 실행하는 중 변수들의 존재유무, 리소스의 상태등 코드의 주변환경을 일컫는대 이정보들을 좀더 공학적으로 State information이라 부른다.

 

state information은 process가 running될때 필요하며 program counter, register, main memory등이 state information에 해당된다.

 

특히!! program counter, register는 현재 사용하고 있는 process만이 이를 점유하여 사용하기 때문에 각각 process마다 고유하게 존재한다.

 

Context switch

우선 CPU가 1개인 상황에서 Process1과 Process2가 동시에 실행중 이라 가정하고, 다음사진을 확인해 보자.

출처 -  https://afteracademy.com/blog/what-is-context-switching-in-operating-system
Process1이 실행되던 도중 "OS가 이제 너는 그만 CPU를 사용하고 Process2한태 좀 넘겨라" 라고 명령을 내리면 Process1은 이전까지 자기가 사용하던 모든 state information을 CPU의 register에 저장한 후 Process2가 CPU를 다 사용할때 까지 기다린다.
이때 CPU의 handle을 process1에서 process2로 넘길때 CPU가 노는 시간인 over-head가 발생한다.

 

이렇게 Process2에서 사용되던 CPU는 위에서와 마찬가지의 방식으로 다시 CPU1에서 handle이 넘어간다.

그런대 한가지 문제점이 있다. 그림을 보면 각 process들의 작업 흐름(Logicla Control Flows)가 끊어지지 않는가?

 

사실 이는 그림에서만 그렇게 보일뿐 각각의 process들은 자신의 작업이 중단됬었는지를 모른다.

그냥 process는 자기혼자 CPU를 쭉 사용하고 있었다고 착각이 드는것 이다.

Process1도 Process2도 자기가 CPU를 쭉 사용하고 있는중이라 생각하는 것 이다.

 

이러한 방식으로 하나의 CPU를 여러 process들이 사용하는대 이를 Context Switching이라 부르며 OS의 kernel로부터 관리된다.

 

끝으로

요즘 C언어의 기본 주축을 잘만들어 논 덕분인기 관련된 공부를 하기가 한결 수월하다. Linux로 시스템 프로그램을 배우는것도 재미있고, 추가적으로 C언어로 자료구조또한 기본정도 공부하고있는 중인대, 기초개념공부를 아주 명확히 해논덕분 이라 생각한다. 인프런에 따배씨강의를 만들어주신 홍정모 교수님께 다시한번 감사드린다.

댓글