운영체제와 컴퓨터

Yeji·2023년 6월 26일
1

운영체제

목록 보기
1/3

1. 운영체제

컴퓨터의 하드웨어가 잘 동작하게 하기 위한 소프트웨어
여러 프로그램이 동시에 최적의 성능을 낼 수 있게끔 CPU와 메모리 등을 관리 

역할

운영체제의 역할은 네 가지로 정의할 수 있다.

1. CPU스케줄링과 프로세스 관리

  • 어떤 프로그램을, 얼마만큼 실행할 것인지 CPU에게 명령
대부분의 O/S는 주로 선점형 스케줄링을 사용한다.

선점형 스케줄링이란, 프로세스 중 우선순위가 높은 프로세스가 CPU를 먼저 차지하는 것이다.

2. 메모리 관리

  • 메모리를 어떤 프로세스에 얼만큼 할당할지 결정
메모리는 CPU로 갈 수록 cost가 높아지고 speed가 빨라지며,
Disk로 갈 수록 cost가 낮아지고 speed가 느려진다.

따라서 메모리에 어떤 데이터가 나가고 들어올지, 결정하는 것이 중요하다.

3. 디스크 관리

  • 디스크 파일을 어떤 방법으로 보관할지 결정
개발자가 작성한 코드는 .exe, .dll 등과 같은 실행파일로 컴파일 된다.

컴파일된 파일은 디스크에 저장되는데,
얼마나 빠른 속도로 파일에 access할 것인가를 결정한다.

4. I/O 디바이스 관리

  • 마우스, 키보드 등과 같은 I/O 디바이스 간 데이터를 주고받는 것 관리

구조

박스로 표시된 요소가 운영체제를 구성하고 있다고 보면 된다.


유저프로그램
GUI
시스템콜
커널
드라이버
하드웨어


각각의 구성요소가 정확히 어떤 것을 의미하는지 살펴보자.

GUI

유저가 컴퓨터와 상호작용할 수 있도록 명령어를 그래픽으로 표현한 것이다.

아이콘 등을 의미한다.

시스템콜

운영체제는 커널모드와 사용자모드로 나뉘는데,
사용자모드에서 커널모드로 전환하기 위해 필요한 인터페이스를 의미한다.

사용자모드에서 컴퓨터의 모든 작업을 수행할 수 있는 권한이 없기 때문에
유저 프로그램은 운영체제를 통해, 즉 커널모드로 전환해 특정 작업을 수행한다.

커널

프로그램이 운영 체제에 요구하는 시스템 콜을 수행하거나, 프로세스와 메모리를 관리하며
하드웨어 관련 작업은 직접 수행하는 등 운영 체제의 핵심을 담당한다.

드라이버

하드웨어 장치를 제어할 수 있는 소프트웨어다.

2. 사용자 모드와 커널 모드

운영체제는 왜 사용자모드와 커널모드로 분리되어 있을까?
사용자 모드와 커널 모드가 동작하는 방식에 대해 알아보면 그 이유를 알 수 있다.

현재 컴퓨터는 특정 작업을 수행 중이라고 가정할 때,

1. [유저모드]
개발자인 우리가 어떤 코드를 작성했고 이 코드를 실행시키는 명령어를 입력했다.
인터럽트가 발생한다.

2. [유저모드 => 커널모드]
현재 실행중인 프로그램 CPU 상태를 저장한다. (나중에 다시 실행하기 위해)

3. [커널모드]
CPU에서 커널모드가 실행되고 앞서 발생한 인터럽트나 시스템콜을 직접 처리한다.

4. [커널모드]
처리완료 후 다른 프로그램(혹은 이전에 실행했던 프로그램) CPU 상태를 복원한다.

5. [유저모드]
프로그램을 이어 실행한다.

운영체제의 듀얼모드는 컴퓨터의 시스템을 보호한다.
만약 유저모드로 컴퓨터의 모든 I/O 디바이스를 조작할 수 있다면, 혹은 프로세스를 마음대로 할당할 수 있다면
하드웨어 자원을 안전하게 관리하고 시스템을 안정적이게 작동시키란 불가능할 것이다.

modebit

시스템콜은 modebit을 참조해 사용자모드와 커널모드를 구분한다.

여기서 modebit은 사용자모드와 커널모드를 전환하기 위한 비트라고 볼 수 있다.
사용자모드는 1, 커널모드는 0으로 표시하며, 사용자모드와 커널모드의 전환이 안정적으로 이루어질 수 있도록 한다.

modebit이 올바르게 설정되어 있지 않을 시, 운영체제는 프로세스를 강제 종료 시킬 수 있다.

3. 컴퓨터 요소

컴퓨터는 CPU, DMA 컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어져 있다.

먼저 간단하게 컴퓨터 요소가 운영체제와 어떻게 상호작용 하는지 그림을 보며 알아보자.

CPU(Central Process Unit)

산술연산을 담당하는 CPU의 구성 요소에는 제어장치, 레지스터, 산술논리연산장치가 있다.

각각의 요소를 더 자세히 알아보자.

산술논리연산장치(ALU, Arithmetic Logic Unit)

산술 및 논리 연산을 계산한다.

제어장치(CU, Control Unit)

명령어를 읽고 처리하며 ALU와 메모리 등 다른 하드웨어와 데이터를 주고 받아 CPU의 모든 기능을 제어한다.

레지스터

CPU 내부애 존재하는 매우 빠른 저장장치를 말한다.
CPU와 직접적으로 연결되어 있기 때문에 다른 메모리보다 연선 속도가 훨씬 빠르다.

CPU는 자체적으로 데이터를 저장할 방법이 없기 때문에
레지스터에서 명령어나 데이터를 일시적으로 저장하고 처리한다.

동작 원리

1. 제어장치가 메모리와 레지스터에 실행하려는 명령어를 로드한다.
2. 제어장치가 레지스터에 있는 값을 계산하라고 산술논리연산장치에 명령한다.
3. 제어장치가 계산된 값을 레지스터에서 메모리로 저장한다.

DMA(Direct Memory Access) 컨트롤러

프로세서(CPU)의 개입 없이 I/O 디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치

CPU에만 인터럽트 요청이 집중되어 부하가 발생할지 않도록 CPU의 일을 나눠 부담한다.

DMA의 동작원리를 아주 간단하게 정리하고 넘어가자.

  1. I/O 장치가 메모리와 직접 데이터를 교환하려고 할 때 DMA요청을 DMA 컨트롤러에 보낸다.

  2. DMA는 이 요청을 수락하고 CPU에 Hold Request를 전송한다.

  3. CPU는 DMA가 보낸 요청을 받고 시스템 버스를 포기한 후 Hold Acknowledgement를 DMA 컨트롤러에게 보낸다.

  4. Hold Acknowledgement를 받은 DMA 컨트롤러는 데이터 전송이 가능하다는 것을 I/O 장치에게 알린 후 시스템 버스를 점유해 메모리로 데이터를 전송한다.

  5. DMA 컨트롤러는 인터럽트를 발생시켜 데이터 전송이 완료됐음을 CPU(프로세서)에 알린다.

  6. 프로세서는 시스템 버스를 다시 점유해 중단된 부분부터 프로세스 처리를 시작한다.

cf) 시스템버스란?
컴퓨터시스템 내 하드웨어들 간에 정보를 전달하기 위한 일종의 통로

메모리

현재 실행되는 프로그램의 명령어와 데이터를 저장하는 장치다.
주로 주기억장치인 RAM(Random Access Memory)을 일컫는다.

프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 한다.

타이머

몇 초 안에 작업이 끝나야 된다는 것을 정하고 특정 프로그램에 시간제한을 건다.
처리 시간이 오래 걸리는 프로그램이 작동할 때 제한을 걸기 위해 존재한다.

디바이스 컨트롤러

컴퓨터와 연결되어 있는 I/O 디바이스의 CPU를 말한다.

4. 인터럽트

시스템에서 발생한 다양한 종류의 이벤트, 혹은 그 이벤트를 알리는 메커니즘

인터럽트가 발생하면 CPU는 즉각적으로 커널모드로 전환해 인터럽트 핸들러 함수를 실행한다.

유저 프로그램 명령어를 실행하고 있는 도중 인터럽트가 발생한다면,
실행하고 있는 명령어까지는 처리를 한 뒤 커널모드로 전환해 알맞은 작업을 수행한다.

인터럽트의 종류는 다음과 같은 것들이 있다.


  1. I/O 작업이 완료되었을 때
  2. 전원에 문제가 생겼을 때
  3. 타이머 시간이 다 되었을 때
  4. 0으로 나눴을 때
  5. 잘못된 메모리 공간에 접근을 시도했을 때

4, 5는 프로그램 레벨에서 발생하는 소프트웨어 인터럽트라고 해서 trap이라고도 부른다.

하드웨어 인터럽트

I/O 디바이스에서 발생하는 인터럽트

하드웨어 인터럽트가 발생하면 시스템콜을 통해 커널모드로 전환한 뒤
원하는 디바이스에 있는 로컬 버퍼에 접근해 작업을 수행한다.

소프트웨어 인터럽트

트랩(trap)이라고도 부르며 프로세스 오류 등으로 프로세스가 시스템콜을 호출할 때 발생한다.
profile
채워나가는 과정

0개의 댓글