본문 바로가기

아카이브/운영체제

운영체제 이론

반응형

프로그램 vs 프로세스


프로그램 : 보조기억장치(HDD) 등에 저장된 실행코드.

프로세스 : 보조기억장치로부터 불러와서(적재:Loading) 프로그램의 상태가 메모리 상에서 실행되는 작업 단위.


프로세스의 상태


커널 내에는 준비 큐, 대기 큐, 실행 큐 등의 자료 구조가 있다. 커널은 이들을 이용하여 프로세스를 관리한다.


1. 생성 : 프로세스가 생성되는 중이다.(아직 실행되는 상태는 아니다)

2. 실행 : 프로세스가 CPU를 차지하여 명령어들이 실행되고 있다.

3. 준비 : 프로세스가 CPU를 사용하고 있는 것은 아니지만, 언제든지 사용할 수 있는 상태이다. 즉 CPU할당을 기다리고 있는 상태이며, (스케쥴러에 의해) 우선순위가 높은 프로세스가 CPU를 할당받는다.

4. 대기 : 보류이다. 프로세스가 입출력 작업이나 신호 수신 등의 이벤트를 기다리고 있는 상태이다.

5. 종료 : 프로세스 실행이 종료된다.


*커널(Kernel)이란, 단 한마디로 정의내리기 어렵지만, 운영체제의 핵심 부분으로, 운영체제 및 응용 프로그램에 필요한 여러가지 서비스를 제공한다. 좁은 의미의 정의로는 '항상 실행되고 있는 프로세스'이다. 



프로세스 제어 블록(Process Control Block) 


프로세스에서 관리할 필요가 있는 (중요한)정보를 포함하는 운영체제 커널의 자료구조이다. PCB는 운영체제가 프로세스를 표현한 것이다. 

일반적으로, 프로세스 식별자/프로세스 상태/프로그램 상태(계수기)/CPU 스케쥴링 정보/메모리 관리 정보 등을 포함한다. (윈도우에서 작업 관리창에서 볼 수 있는 정보들이다.)


PCB는 프로세스의 중요 정보를 가지고 있기 때문에, 사용자가 접근하지 못하게 되어있다. 보호된 메모리 영역 안에 존재한다.



사용자 권한과 관리자 권한


운영체제는 가상 메모리를 사용자 공간과 커널 공간으로 분리한다. 커널 공간은 커널과 커널 확장기능(입출력과 같은..), 대부분의 장치 드라이버들을 실행하기 위한 공간이다. 사용자 공간은 모든 사용자 응용 프로그램들이 동작하는 메모리 영역으로, 필요시에 페이징 처리될 수 있다.


두 영역을 분리하는 이유는, 오동작을 유발하는 응용 프로그램이 시스템 전체의 안정성을 해지지 않게 하기 위해서이다.


컨텍스트 스위치(문맥 교환)


컨텍스트 스위치란, 하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하는 것을 막기 위해, 이전의 PCB를 보관하고 새로운 프로세스의 상태를 적재하는 작업을 말한다. 



프로세스간 통신(IPC)


IPC는 프로세스들 사이에 서로 데이터를 주고받는 행위나 방법, 경로를 말한다.


공유 메모리(Shared Memory)는 여러 프로그램이 동시에 접근할 수 있는 공간이다. 여기서 사용하는 메모리 공간은 한 프로세스가 가진 메모리 공간이다. 

메시지 전달은, 



프로세스 vs 스레드



.프로세스는 보조기억장치에 저장되어 있던 프로그램에 대한 인스턴스이다. 

동일 프로그램에 대한 여러 프로세스를 실행시켰다고 해도, 각각의 프로세스는 주소공간, 메모리 등을 할당 받는다.

반면에,

스레드는 한 프로세스 내에서 동작되는 여러 실행 흐름이다. 즉, 프로세스의 작업 단위라고 할 수 있다. 스레드들간에는 프로세스 내의 메모리 공간이나 자원들을 공유하면서 실행된다. (메모리 공간과 자원 공유의 관점)


또한, 프로세스보다 스레드를 사용하는 것이 메모리 공간과 시스템 효율성 면에서 뛰어나다. (프로세스는 각각의 자원을 할당 받는다는 것을 잊지 말자) 

스레드 간의 통신이 필요할 경우, 전역변수(Heap 메모리 공간)을 이용하여 편하게 데이터를 주고 받을 수 있다,.


스레드의 장점은 다음과 같다.

1. 시스템의 처리량이 향상된다.

2.. 시스템의 자원을 효율적으로 사용한다.

3. 프로그램의 응답시간이 단축된다.

4. IPC에 비해서 통신 방법이 훨씬 간단하다. (IPC를 위한 특별한 커널의 지원을 받지 않아도 된다. 이 부분은 추후 업데이트)


하지만, 단점도 있다.

스레드들 사이에서 프로세스 자원(전역변수)을 공유하기 때문에, 충돌 문제가 발생하지 않도록, 동기화 문제를 해결해야 한다. 추후 스레드를 사용하는 코드 첨부.

 




* 이 글은 이해와 복습을 목적으로 계속 갱신하고, 이론을 정리하는 데 목적이 있습니다.



반응형