관리 메뉴

caLAB

[운영체제 2주차] 하루 30분 컴퓨터 과학 공부하기 본문

개발 공부/컴퓨터 과학

[운영체제 2주차] 하루 30분 컴퓨터 과학 공부하기

도이(doi) 2021. 9. 2. 22:37
728x90

이중모드 / 하드웨어 보호

 

아래는 cpu의 구성에 대한 그림이다. cpu는 cpu내부에 기억장치인 레지스터와 계산을 하는 alu 제어를 하는 control unit으로 구성되어 있다. 역기서 레지스터는 비트들의 모음으로 cpu의 상태를 나타낸다. 이를 상태 플래그라고 한다. 상태 플래그에는 캐리, 네거티브, 오버플로우 등이 있다. 이런 cpu를 직접적으로 제어하는 명령어들을 특권 명령(privileged instructions)이라고 한다. 이름에서 표현하듯이 이러한 명령은 특별한 경우에만 사용되어야 된다.

cpu의 구성

 

컴퓨터를 사용하다보면, 한 컴퓨터를 여러 사람이 동시에 사용하거나 한 사람이 여러 개의 프로그램을 동시에 사용할 수 있다. 이 때 사용자가 쉽게 cpu를 제어할 수 있게 되면 프로그램 전체에 영향을 끼쳐서 문제가 발생하게 된다. 이에 대한 해결책으로 이중모드가 등장한다. 이중모드는 사용자 모드와 관리자 모드가 존재한다. 

*관리자 모드는 시스템 모드, 모니터 모드, 특권 모드 등으로 불리운다. 

 

이중모드는 관리자 모드와 사용자 모드가 번갈아가면서 사용된다. 아래는 이를 표현한 그림이 있다. 

이중 모드 예시

프로그램을 처음 실행하게 되면 처음 프로그램을 메모리에 적재한다. 그 후 user mode에서 사용자가 키보드나 마우스를 움직여서 cpu의 인터럽터에 전기 신호를 보내게 되면 system mode로 전환된다. system mode로 전환되어서는 os에서 interruptor service routine(코드)을 실행하여 사용자가 요청한 업무를 수행한다. 요청 업무가 모두 끝나면 다시 user mode로 전환된다. 

이중 모드 관계

 

 

운영체제의 중요한 역할 중 하드웨어를 보호하는 것이다. 하드웨어를 보호하는데는 총 3가지가 방법이 있다.

 

- 입출력 장치 보호

- 메모리 보호

- cpu 보호

 

입출력 장치를 보호하는 방법으로는 입력과 출력에 대한 명령을 특권 명령인 IN, OUT으로 지정하여 입출력을 위해서 운영체제에 요청하도록 한다. 만약, 올바른 입출력이 아닐 때는 os에서 판단하여 요청을 거부한다. 

 

예를 들어서 사용자가 게임에서 점수를 저장할 때 게임 프로그램이 하드디스크 파일에 접근 하기 위해서 os에 요청한다. 이는 소프트웨어 인터럽터의 예시로. 사용자가 직접 하드디스크에 접속하여서 점수를 저장하는 것이 아닌 os에 부탁을 하여서 작업을 처리한다고 생각하면 된다. 

 

메모리 보호는 다른 사용자 메모리 또는 운영체제 영역에 대한 메모리 접근을 보호하는 것이다. 이는 클라우드를 생각하면 쉽다. 클라우드에는 여러 사람들이 정보를 저장해놓는데 우리는 우리의 id로 업로드한 자료에만 접근할 수 있다. 이는 MMU(memory management unit) 덕분이다. MMU는 문지기의 역할을 하여서 사용자가 본인이 지정된 address에만 접근하고 다른 메모리 영역 침범하지 않도록 감시하도록 한다. #1 사용자는 address 100-1000번 까지만 접근할 수 있다. 1001 - 3000 번은 다른 사용자의 address이기 때문에 #1 사용자는 문지기인 MMU에 의하여 접근이 허용되지 않는다. 이러한 것을 base, limit이라고 부른다.

메모리 보호

cpu보호는 interruptor service routine에서 한 프로그램이 cpu 시간을 점유하고 있을 때 강제로 다음 프로그램으로 넘어가도록 하는 것이다. 예를들어서 프로그래머의 실수로 무한 루프 함수를 만들게 되면 해당 함수가 있는 프로그램만 실행하게 되고 다른 프로그램은 실행할 수 없게 된다. 이러한 상황에서 cpu가 특정 시간을 경과 시에 한 사용자가 cpu 점유를 독점하는 것을 막는 타이머 인터럽트가 운영체제에 있다. 

 


운영체제 서비스

 

운영체제는 하드웨어의 자원을 프로그램에 효율적으로 나누어주는 역할을 한다. 이러한 것들을 관리하기 위해서 운영체제는 각각의 하드웨어에 해당하는 서비스를 가지고 있다.

 

- 프로세스 관리(프로세스 생성, 소멸, 통신, 동기화, 교착 상태 처리)

- 주기억장치 관리(메모리 공간 할당, 추적 및 감시, 메모리 회수, 가상메모리)

- 파일 관리(파일 생성, 삭제, 디렉토리(folder) 생성, 삭제, open, close, write, 백업)

- 보조기억장치 관리(빈 공간 관리, 저장 공간 할당, 디스크 스케쥴링)

- 입출력 장치 관리(장치 드라이브, buffering, caching, spooling)

- 네트워킹

- 보호 

- 기타...

 

*파일 : 트랙, 섹터로 구성된 디스크르 파일이라는 논리적 관점으로 봄. 

*디스크 스케쥴링 : 디스크의 헤드를 조금 움직이면서 원하는 트랙 또는 섹터를 읽을 수 있도록 관리. 

*buffering, caching : 입출력 장치에서 읽은 내용을 메모리로 가져오는 것.

*spooling : 메모리 대신 하드디스크를 중간 매체로 사용. 

 

위의 이름 그대로 각각의 서비스들은 그 이름에 해당되는 기능의 관리를 하게 된다. 가장 중요한 프로세스 관리에 대해서 설명해보자면, 프로세스는 실행 상태에 있는 프로그램으로 프로세스 관리에서는 프로세스의 생성, 소멸 등을 관리하고 프로세스 간의 통신, 동기화를 관리한다. 또한, 프로그램이 너무 많이 돌아가서 교착상태에 빠지게 되는 것들도 해결한다. 운영체제는 이렇듯 각각의 하드웨어를 관리하는 역할을 한다. 

 

운영체제 서비스를 받기 위한 호출을 시스템 콜이라고 한다. 프로그램이 특정한 기능이 필요할 때 이를 운영체제에 부탁하는 것이다. 예를들어서 프로그램이 파일을 만들거나, 프린트를 해야될 때 이를 운영체제에 요청하는 것을 시스템 콜이라고 한다고 생각하면 된다.

시스템 콜


프로세스 관리

프로세스의 정의, CPU 스케쥴러, 멀티프로그래밍

프로세스는 무엇일까? 이전에도 설명했지만 프로세스는 프로그램이 메인 메모리에 올라와서 실행되고 있는 상태를 프로세스라고 한다고 하였다. 무덤 속 프로그램, 살아 움직이는 프로세스 라는 비유를 생각하면 기억하기 쉬울 것이다.

프로세스는 다른 말로 task, job이라고 불리우기도 한다. 프로그램 실행 중에 프로세스는 text, data, stack 등이 메인 메모리에 생성돼서 cpu와 상호작용한다. 프로그램이 메인 메모리에 올라와서 실행될 때만 cpu와 소통할 수 있다.

프로세스

 

프로세스는 여러 상태를 가지고 있다. 프린터를 하는 일련의 과정을 프로세스 상태와 함께 설명해보도록 해보자. 

처음 프린트 작업을 하기 위해서 메인 메모리에 프린트를 하기 위한 프로세스를올린다. 준비가 모두 완료 되면 ready 즉 준비 상태가 된다. cpu 명령을 통해서 프린트를 하라는 명령이 내려지는 것이 running 상태이다. 프린터는 이 명령을 듣고 출력을 하는데 이 때 cpu는 명령을 내렸기 때문에 다른 작업을 하게 되므로 프린트 관련 프로세스는 프린트물을 출력하는 과정에는 waiting 상태가 된다. 이전에 우리가 공부했다시피 최근 운영체제는 대부분 다중 프로그래밍 시스템을 가지고 있다. 따라서 running 시간이 길어지게 되면 시간이 만료되며 ready 상태로 가기도 한다. 명령이 모두 끝나고 프로세스를 종료하게 되면 terminate 즉 프로세스가 완전히 끝난 상태로 간다. 

프로세스의 상태

운영체제의 프로세서에는 프로세스의 하위항목 2가지가 있다. 하나는 PCB로 프로세스 제어 블록이다. PCB는 프로세스에 대한 모든 정보를 저장한다. 나머지 하나는 Queues이다. Queues는 이름 그대로 줄서서 기다리는 것으로 프로세스가 메인 메모리에 올라가기 위해 줄 서 있는 상태를 말한다. 이 둘은 아래 그림과 같이 운영체제에 프로세스 관리의 하위에 있다. 

pcb, queue의 위치

 

우선, PCB부터 설명해보자면, PCB는 프로세스 하나 당 한 개가 할당된다. 이는 해당 프로세스에 대한 모든 정보를 저장하게 된다. 예를들어서 프로세스의 상태(running, ready, waiting), 프로세스가 메인 메모리의 어디에 위치해 있는지(base, limit : 메모리에서의 프로세스의 주소), CPU 사용 시간, 프로세스 id, 현재 프로세스에서 어떤 파일을 사용하고 있는지, 레지스터 값(cpu의 상태에 대한 정보) 등이 있다.

PCB를 우리가 살고 있는 사회와 비유하자면, os가 정부라면 정부에서 국민을 관리하기 위해 국민에게 주민등록번호를 부여하게 되는데 이 주민드록번호가 바로 PCB라고 생각하면 된다. 주민등록번호는 이런 저런 데이터들과 연결되어서 우리에 대한 다양한 정보들을 제공하게 된다. 컴퓨터의 PCB 또한 주민등록번호처럼 프로세스를 관리하기 위해서 존재한다. 

 

Queues는 사전적 의미로 줄이라는 뜻을 갖고 있다. 이름과 마찬가지로 Queues는 줄 세우기에 해당하는 역할을 한다. Queues의 종류에는 Job Queue, Ready Queue, Device Queue가 존재한다.

Queue

 Job Queue는 하드 디스크에 있는 프로그램이 메인 메모리에 올라가기 위해 줄 서 있는 것을 가리킨다. job schedular는 어떤 것을 먼저 메인 메모리에 올려줄지 결정해준다. IO 바운드와 CPU 바운드의 처리를 적절히 섞어서 스케쥴링해주는 역할을 하기도 한다. 이는 long-term schedular로 프로세스가 완전히 끝나고 빈 공간을 차지하기 때문에 느리게 동작해도 되기 때문이다. 

 

Ready Queue는 메인 메모리에 올라와 있는 것들이 cpu service 처리를 받기 위해 줄 서 있는 것을 가리킨다. cpu scheduler가 스케쥴링을 하게 되는데 cpu 처리가 빠르기 때문에 짧은 시간에 스케쥴링이 이루어져야 되는 특징을 가지고 있다. 그렇기 때문에 이는 short-term schedular이다. 

 

Device Queue는 입력장치(I/O)의 처리를 받기 전까지 줄 서 있는 것을 가리킨다. 

 

멀티 프로그래밍은 메인 메모리에 여러개의 프로세스를 올리는 것을 말한다. 멀티 프로그래밍에는 I/O 바운드와 CPU 바운드가 있다. I/O바운드는 프로세스가 하는 일이 주로 I/O에 관련된 것을 일컫는다. 예를들어서 한컴 프로그램을 생각해보면 우리가 주로 타이핑을 할 때 상태가 많이 변하기 때문에 이는 I/O 바운드 프로세스에 해당한다. CPU바운드 프로세스는 프로세스의 주된 업무가 계산 즉 cpu의 사용이다. 예를들면 날씨 데이터를 가져와서 다량의 연산처리를 해야되는 슈퍼 컴퓨터를 사용하는 프로그램의 경우에 cpu바운드 프로세스라고 생각할 수 있다. 멀티 프로그래밍은 medium-term schedular에 해당된다.

 

다중 프로세스를 처리할 때 한 프로세스가 쉬는 상태라면 그 프로세스를 계속 메모리에 올려두는 것은 비효율적이다. 그래서 swapping이라는 개념이 있다. 

swapping

스와핑은 메인 메모리에서 쉬고 있는 프로세스를 다시 하드 디스크에 갖다 놓는 역할을 한다. 이를 swap out이라고 한다. 사용하지 않는 메모리를 쫓아내는 얄짤없는 친구이다. 프로세스를 쫓아내는 목적으로 하드 디스크를 사용할 때 이를 swap device(=backing store)라고 부른다. 프로세스를 다시 사용해야 돼서 하드 디스크에 있던 프로그램을 불러오는 것은 swap in이라고 한다.

 

context switching

컨텍스트 스위칭이라는 개념은 여러개의 프로세스가 돌아가고 있을 때 현재 프로세스가 실행되던 중 다른 프로세스로 넘어가는 것을 말한다. 컨텍스트 스위칭에서 스케쥴러(schedular), 디스패처(dispatcher), 컨텍스트 스위칭 오버헤드(context switching overhead)라는 개념이 있다. 스케쥴러는 현재 프로세스가 끝난 후 어떤 프로세스를 실행할지를 정하는 역할을 한다. 디스패처는 현재 프로세스에서 다른 프로세스로 넘어갈 때 프로세스의 정보를 PCB에 저장되는 것을 말한다. 예를들어서 프로세스1의 현재 상태를 PCB1에 저장하고 PCB2에 저장된 프로세스2의 값을 복원하는 것을 디스패처라고 한다. 컨텍스트 스위칭 오버헤드는 이름에서 느껴지는 것과 같이 컨텍스트 스위칭이 많이 일어나게 되면 CPU에 부담이 증가하는 것을 말한다. 따라서, 컨텍스트 스위칭 관련 기능은 가볍게 만들어야 되기 때문에 assembly어로 코드를 주로 작성한다.

 

728x90
반응형
Comments