작업(Job)과 프로그램(Program)은 컴퓨터 시스템에서 실행 요청 전의 상태라 프로그램과 프로세스는 다르다. 프로세스가 정확히 무엇인지 알아보도록 하자.

프로세스(process)실행을 위해서 커널에 등록된 작업으로 커널에 의해 관리되는 실행 중인 프로그램이라고 할 수 있다. 프로세스는 프로세스 관리 블록(PCB)을 할당받는 개체로 각종 자원들을 요청하고 할당받을 수 있다. 따라서 실행 중에 각종 자원을 요구하고 할당받고 반납하는 능동적인 개체이다.

 

프로세스 관리 블록(PCB, Process Control Block)이란 ❓

메모리 영역은 프로세스가 쓰는 공간과 커널 공간이 있으며 PCB는 커널 공간 내에 존재하고 프로세스가 생성 시 생성된다. OS가 프로세스 관리에 필요한 정보를 저장하는 곳으로 각 프로세스들에 대한 정보를 관리하는 곳이다. PCB가 관리하는 정보에는 프로세스 상태, PID(프로세스 고유 식별 번호), 스케줄링 정보, 메모리 관리 정보, 입출력 상태 정보 등이 들어가 있다. PCB 정보는 OS별로 다르며 PCB 참조 및 갱신 속도가 OS의 성능을 결정짓는 중요한 요소이다.

 

 

자원이란 커널의 관리하에 프로세스에게 할당/반납되는 수동적 개체로써 HW자원과 SW 자원으로 나뉜다. HW자원으로는 프로세서, 메모리, 디스트등이 있으며 SW 자원으로는 파일, 메시지 등이 있다.

 

 

프로세스 상태변화를 알아보자.

 

 

Created State

Job이 커널에 등록되어 PCB가 할당되고 프로세스가 생성된다. 메모리 공간을 기준으로 쓸 수 있는 메모리 공간이 있다면 ready , 쓸 수 있는 메모리 공간이 없다면 suspended ready로 이동된다.

 

Ready State

프로세서 외에 다른 자원들은 모두 할당받은 상태이다. 프로세서의 할당을 대기하고 있는 상태 즉 아직 프로세서를 할당받지 못한 상태이다.

 

Ready State -> Running State로 넘어가는 것을 Dispatch 혹은 Schedule이라고 부른다 ❗

 

Running State

프로세서와 필요한 자원을 모두 할당 받은 상태로 다시 ready state로 내려가는 Preemption 경우가 있다. 이 경우는 타임아웃이 되었거나 우선순위 변화에 따라서 cpu를 빼앗긴 상태이다. Running state에서 asleep state로 내려가는 것으로 Block/sleep이라 부른다. 이 경우는 I/O 등 자원 할당을 요청하거나 메모리에서 데이터를 읽거나 써야 할 때 다른 프로세스가 CPU를 사용할 수 있도록 하기 위해 block 된다고 보면 된다.

 

Blocked/Asleep State

프로세서외에 다른 자원을 기다리는 상태로 기다리는 자원이 왔다고 하여 바로 Running state로 올라갈 수 없다. 따라서 ready state에 가서(Wake-up) 프로세서의 할당을 기다려야 한다.

 

Suspended Sate

  • suspended ready : 메모리를 할당받지 못한 상태
  • suspended blocked : 메모리를 빼앗긴 상태 (메모리 이미지를 swap device에 보관)

여태까지 메모리 한 작업들이 다른 프로세스의 작업으로 인해 전부 지워질 경우 다시 처음부터 해야 하는 비효율이 발생하므로 여태까지 메모리에서 한 작업들을 사진처럼 찍어두어 sawp device에 저장시키는 것이다.

 

Terminated State

프로세스 수행이 끝나서 모든 자원을 반납 후 커널 내에 일부 PCB정보만을 수집한 상태이다. PCB정보를 수집하는 이유는 똑같은 작업이 또 들어올 경우 더 빠르게 처리하기 위해서이다. 수집이 전부 끝나면 프로세스를 삭제시킨다.

 

 

프로세스 관리를 위한 자료구조

Ready list에 프로세스들이 대기하게 되고 스케줄러에 의해서 프로세스들의 순위가 결정된다. Blocked lists에서는 자원별로 프로세스들을 관리한다.

 

참고자료

www.youtube.com/watch?v=jZuTw2tRT7w&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=5

 

운영체제는 커널과 유틸리티 2개의 구조로 되어있다.

커널(Kernel) : OS의 핵심 부분으로 가장 빈번하게 사용되는 기능들을 담당하기에 메모리에 상주되어있다.

유틸리티(Utility) : 비상주 프로그램으로 UI등의 서비스 프로그램을 뜻한다.

 

 

👀 단일구조

단일 구조일 경우 커널이 거대해지고 오류와 버그, 추가 기능 구현 등의 유지보수가 어렵다. 또한 동일 메모리에 모든 기능이 있어 한 모듈의 문제가 전체 시스템에 영향을 줄 수 있다. 예를 들어서 메모리 관리자 모듈에 악성코드가 있다고 한다면 나머지 모듈들에도 악성코드가 접근 가능하다.

 

👀 계층구조

 

이렇게 모듈별로 계층을 두어 유지보수가 쉽고 설계를 단순화한다. 그러나 하나의 모듈에 접근하기 위해 여러 모듈을 거쳐 접근해야한다.

 

운영체제의 기능

1️⃣ 프로세스(Process) 관리

프로세스를 생성/삭제하고 상태를 관리하게하고 프로세스에게 자원을 할당하며 프로세스간의 통신 및 동기화를 담당하고 있다. 또한 프로세스의 정보를 관리하기 위해 PCB(Process Control Block)을 가지고 있다.

 

2️⃣ 프로세서(Processor) 관리

프로세스들에 대해 프로세서를 할당해야하는데 프로세서 하나당 하나의 프로세스만이 사용가능하다. 이러한 할당을 관리한다. 즉 프로세서의 할당의 순서에 따라서 프로세스의 처리 순서가 결정되고 즉 프로세스의 스테줄링이 이루어진다.

 

3️⃣ 메모리 관리

메모리 여유 공간을 관리하고 프로세스에 대한 메모리를 할당하고 회수한다. 메모리 할당 방법으로는 전체 적재와 일부 적재가 있다.

 

4️⃣ 파일 관리

파일이란 논리적 데이터 저장 단위로써 운영체제는 사용자와 시스템의 파일을 관리한다.

 

5️⃣ 입출력(I/O) 관리

입출력은 과정은 OS를 반드시 거쳐야 한다.

 

참고 자료

www.youtube.com/watch?v=hzXVQIlSSos&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=3

www.youtube.com/watch?v=knF9lzHA3LI&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN&index=4

 

 

운영체제란 ❓

HW(컴퓨터 시스템)을 효율적으로 관리해서 사용자나 응용 프로그램에게 서비스를 제공하는 것

 

하드웨어는 크게 3종류로 나뉜다.

  1. 프로세서(CPU, GPU)

  2. 메모리(DRAM, Disk)

  3. 주변장치(키보드,마우스,모니터, 네트워크 모뎀)

프로세서(Processor)

컴퓨터 모든 장치의 동작을 제어하며 연산 수행을 담당한다. 즉 컴퓨터의 두뇌로써 중앙처리장치 

레지스터(Register)

프로세서 내부에 존재하는 메모리

 

레지스터 종류에 따라서

1. 사용자 가시 레지스터

데이터 레지스터(DR, Data Register) 함수 연산에 필요한 데이터를 저장, 값 혹은 문자등을 저장하여 산술/논리 연산 수행
주소 레지스터(AR, Address Register) 유효 주소를 계산하는데 필요한 주소의 일부분을 저장

 

2. 사용자 불가시 레지스터

프로그램 카운터(PC, Program Counter) 다음에 실행할 명령어의 주소를 보관하는 레지스터
명령어 레지스터(IR, Instruction Register) 현재 실행하는 명령어를 보관하는 레지스터
누산기(ACC, ACCumulator) 데이터를 일시적으로 저장하는 레지스터(ex. 순간 계산 결과로 더해진 값)
메모리 주소 레지스터(MAR, Memory Address Register) 프로세서가 참조하려는 데이터의 주소를 명시하여 메모리에 접근
메모리 버퍼 레지스터(MBR, Memory Buffer Register) 프로세서가 메모리에서 읽거나 저장할 데이터 자체를 보관하는 버퍼 레지스터

 

운영체제와 프로세서는 무슨 관계가 있는걸까 ❓

1. 운영체제는 프로세서에게 처리할 작업을 할당하고 관리(즉, 프로세스(Process) 생성 및 관리)

2. 운영체제는 프로그램의 프로세서 사용 제어

 

메모리(Memory)

프로그램, 사용자데이터 등 데이터를 저장하는 기억 장치

 

용량(저->고): 레지스터, 캐시, 메인메모리, 보조기억장치

속도/가격(높->낮): 레지스터, 캐시, 메인메모리, 보조기억장치

 

레지스터, 캐시, 메인메모리는 프로세서가 직접 접근 가능하지만 보조 기억장치는 불가능해서 메인 메모리로 가져와서 실행 ❗

 

주기억장치(Main Memory)

DRAM을 주로 사용하고 디스트 입출력 병목현상 해소(느린 디스크와 빠른 CPU사이에 격차를 줄인다)

 

캐시(Cache)

프로세스 내부에 있는 메모리(L1,L2 캐시 등)로써 주기억장치(Main Memory)의 입출력 병목현상을 해소(CPU의 속도가 너무 빨라 메인메모리로는 안된다. 따라서 캐시를 둠으로써 격차를 더욱 해소하기 위해 노력)

 

캐시는 하드웨어에서 알아서 관리됨

캐시 히트(Cache hit) - 필요한 데이터 블록이 존재

캐시 미스(Cache miss) - 필요한 데이터 블록이 없는 경우

 

 

캐시의 적중률을 높히려면 지역성이 매우 중요하다. 

  1. 공간적 지역성 - 참조한 주소와 인접한 주소를 참조하는 특성 (메인메모리에서 블록 단위로 캐시로 이동하기 때문에)
  2. 시간적 지역성 - 한번 참조한 주소를 곧 다시 참조하는 특성 (ex. For문 같은 순환문)

-> 지역성을 고려해서 좋은 알고리즘을 짜면 캐시의 적중률을 높힐 수 있다.

 

보조기억장치

프로세서가 직접 접근할 수 없기에 주 기억장치를 거쳐 접근한다. 주변장치에 해당 (ex. CD, HDD)

 

운영체제와 메모리는 무슨 관계가 있는걸까 ❓

1. 운영체제는 메모리 할당 및 관리

2. 운영체제는 가상 메모리 생성 및 관리

 

🚌 시스템 버스(System Bus)

HW들이 데이터 및 신호를 주고 받는 물리적인 통로

데이터 버스 프로세서, 메인메모리, 주변장치 사이에서 데이터 전송, 데이터 버스의 배선 수는 프로세서가 한번에 전송할 수 있는 비트 수 결정(=워드)
주소 버스 프로세서가 시스템의 구성요소를 식별하는 주소 정보를 전송, 주소 버스의 배선 수는 메인메모리의 용량을 결정
제어 버스 프로세서가 시스템의 구성요소를 제어하는데 사용, 제어 신호로 연산종류 결정, 메인메모리의 읽고 쓰는 동작 결정

 

주변 장치

프로세서와 메모리를 제외한 HW

입력장치, 출력장치, 저장장치

 

운영체제와 주변장치는 무슨 관계가 있는걸까 ❓

1. 운영체제는 장치 드라이버 관리, 주변장치를 사용하기 위한 인터페이스를 제공한다는 말이다.

2. 운영체제는 인터럽트 처리(입력이 들어왔다는 사실을 알려주는게 인터럽트라고 생각하면 됨)

3. 운영체제는 파일 생성 및 삭제, 디스트 공간 관리

 

 

 

참고자료

www.youtube.com/watch?v=EdTtGv9w2sA&list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN

 

+ Recent posts