[CS지식] 3. 운영체제

김zunyange·2023년 6월 6일
0

CS Note

목록 보기
10/13
post-thumbnail

Chapter 3. 운영체제

3장은 컴퓨터 시스템과 사용자를 연결해주는 역할을 하는 프로그램 즉, 운영체제이다.

3-1. 운영체제와 컴퓨터

그렇다면 하드웨어와 소프트웨어를 관리하는 일꾼인 운영체제CPU, 메모리 등으로 이루어진 컴퓨터에 대해 본격적으로 알아보자!

⚙️ 운영체제

운영체제(OS, Operating System)란?
사용자에게 편리한 인터페이스 환경을 제공하고 컴퓨터 시스템의 자원을 효율적으로 관리하는 일종의 소프트웨어

유저들은 구글이나 카카오톡 같은 프로그램을 사용하거나, 키보드를 입력하는 등의 작업을 할 때, 동작원리가 어떻게 되는지 알지 못해도 프로그램이 알아서 연동되는 것처럼 이러한 것들을 운영체제(OS)가 다 관리를 해주는 것이다. 아이폰 iOS, 안드로이드, 맥OS, 윈도우, Linux 등 이러한 것들이 전부 운영체제라는 큰 틀 안에 들어가 있다.

TV, 내비게이션 등에도 설치되는 OS는 CPU 성능이 낮고 메모리 크기도 작은 시스템에 내장하도록 만들었기에 임베디드 운영체제 혹은 임베디드 시스템이라고 부른다. 임베디드 시스템이 내장된 기계는 OS를 통해 기능을 향상시킬 수 있다.

뿐만 아니라 OS는 사용자가 직접 자원에 접근하는 것을 막아 자원을 보호하고 관리한다. 여기서 말하는 자원은 컴퓨터에 부착된 모든 장치를 말하며 CPU, 메모리, 키보드, 마우스 등이 있다.

3-1-1. 운영체제의 역할과 구조

운영체제의 역할

👩🏻‍💻 사용자 관점(User View)

일반적으로 사용자는 컴퓨터 앞에 앉아 키보드와 마우스를 조작한다. 이 경우 운영체제는 사용자가 컴퓨터 자원 사용(Resource utilization)을 신경쓰지 않게 도우며, 사용자가 컴퓨터를 쉽게 이용할 수 있도록 만든다. 또 다른 경우, 사용자는 메인프레임에 연결된 터미널을 사용하거나 미니컴퓨터(Minicomputer)를 사용한다. 이 상황에서는 컴퓨터의 자원을 여러 사용자가 나눠쓰게 되는데, 운영체제는 사용자들이 자원을 공평하게 사용할 수 있도록 돕는다.

💾 시스템 관점(System View)

시스템에게 운영체제는 자원 할당자(Resource allocator)다. 컴퓨터 시스템은 CPU 시간, 메모리 공간 할당, 파일 저장소 공간, 입출력 장치 등 다양한 문제를 해결해야 한다. 운영체제는 이러한 컴퓨터 자원들을 관리하는 제어 프로그램으로서 동작한다.


따라서, 위의 역할을 정리하면 운영체제의 목적은 다음과 같다.

(1) 자원 관리 : 여러 응용 프로그램이 자원을 요청하면 적절한 순서로 배분하고 회수하여 자원을 효율적으로 관리한다. ➡️ 효율성

(2) 자원 보호 : CPU, 메모리 등에 대한 사용자와 응용 프로그램의 직접 접근을 막는다. ➡️ 안정성

(3) 하드웨어 인터페이스 제공 : 다양한 제조사, 각기 다른 구성으로 되어있는 마우스, 키보드 등을 복잡한 과정없이 사용할 수 있도록 하드웨어 인터페이스를 제공한다. 일부 하드웨어는 직접 드라이버(=하드웨어 인터페이스)를 설치해야한다. ➡️ 확장성

(4) 소프트웨어 인터페이스 제공 : 사용자가 운영체제를 편리하게 사용하기 위해 제공되는 것으로, 대부분의 작업을 마우스로 수행하거나 스마트폰의 터치스크린 등을 통해 제공되는 기능을 말한다. ➡️ 편리성

🏁 OS는 중간자 역할을 한다고 보면 된다. 사용자 입장에서는 하드웨어의 이용과 성능을 편리하게 해주는 프로그램이고, 시스템 입장에서는 자원을 총괄하는 프로그램인 것이다. 즉, OS의 가장 기초적인 목적은 프로그램을 실행하고, 유저가 겪는 문제를 쉽게 풀 수 있도록 만드는 것에 있다.


운영체제의 구조

위의 그림과 맞대어 다시 정의하자면, 운영체제는 컴퓨터 시스템의 하드웨어, 소프트웨어적인 자원들을 효율적으로 운영 및 관리함으로써 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 하는 시스템 소프트웨어이다. 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 즉, 중개자 역할을 해주는 프로그램이다.

1. 인터페이스 (Interface)
인터페이스는 사용자의 명령을 컴퓨터에 전달하고 결과를 사용자에게 알려주는 소통의 역할을 한다. 거의 모든 운영체제는 사용자 인터페이스인 UI를 제공하며, 여러 형태로 제공될 수 있는데 대표적으로 GUI(Graphical User Interface), CLI(Command Line Interface) 2가지가 있다.
*GUI : 사용자가 창, 아이콘, 메뉴와 같은 그래픽 요소를 사용하여 시스템과 상호작용 ex)검색창, 메뉴, 아이콘, 파일탐색기 등

*CLI : 사용자가 명령을 사용하여 시스템과 상호작용 ex)Windows의 CMD, Mac OS의 Termainal 등

2. 커널 (Kernel)
컴퓨터를 사용해서 어떤 작업을 수행하려면 사용자가 입력한 명령이 컴퓨터 하드웨어를 제어하도록 해줘야 한다(like CLI). 사용자가 명령을 입력하면 쉘(Shell)이 명령을 받아 해석하고 커널에 전달하면 커널을 통해 하드웨어를 조작하는 것이다.

쉘(Shell) : 사용자-운영체제 사이의 커뮤니케이션이 가능하도록 명령어를 해석
Unix 는 사용자 인터페이스를 쉘이라 한다. 참고로 맥 OS X도 알고 보면 유닉스 계열의 커널을 이용해서 만든 것으로 커널이 같더라도 인터페이스에 따라 사용자가 느끼기에는 다른 운영체제처럼 느껴지게 된다.

커널은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단하기 때문에, 자원을 이용하기 위해서는 아래의 시스템 콜이라는 인터페이스를 이용하여 접근해야 한다.

3. 시스템 콜 (System Call)
시스템 콜은 운영체제에게 있어서는 매우 중요한 요소이다. 사용자 모드에 있는 프로그램이 시스템 함수를 직접 호출할 수 없으므로 따로 프로그램이 커널 호출을 요청하는 시스템을 만들어서 커널이 처리해야할 일을 프로그램으로부터 받아서 처리하는 것이다.
쉽게 말해, 운영체제가 커널에 접근하기 위한 인터페이스로, 유저 프로그램이 운영체제의 서비스를 받기 위해 커널함수를 호출할 때 쓰인다.
보통은 함수의 형태로 제공된다. ex) printf(), write()

🚨사용자나 응용 프로그램이 컴퓨터 자원에 직접 접근할 경우 모든 과정을 직접 핸들링을 해야 한다. 하지만 이때 부주의로 인해 컴퓨터 시스템 자체를 파괴할 수 있는 위험이 있다. 이 때 시스템 호출을 사용한다면 요청만 하고 결과만 기다리면 되므로 컴퓨터의 시스템이 파괴되는 일을 막을 수 있다.

4. 드라이버 (Driver)
커널하드웨어의 인터페이스를 담당한다. 커널은 입출력의 기본적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함께 실행 되도록 한다.
컴퓨터 하드웨어의 종류는 다양한데, 이때 운영체제가 각 하드웨어에 맞는 인터페이스를 개발하기는 어려우므로 하드웨어 제작자가 만든 소프트웨어를 받아서 설치하여 하드웨어를 사용할 수 있게 한다. 이 소프트웨어를 디바이스 드라이버라고 한다. 🖨 장치로 예를 들자면, 마우스, 키보드 같은 디바이스 드라이버는 커널에 포함되어 있어 컴퓨터에 꽂기만 하면 작동되지만 프린터, 스캐너 같은 복잡한 디바이스 드라이버는 사용자가 직접 설치해야 한다.


💻 컴퓨터

3-1-2. 컴퓨터의 요소


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

1. CPU (Central Processing Unit)

가장 중요한 컴퓨터 구성요소 중 하나인 CPU는 중앙처리장치라는 뜻으로, 컴퓨터 시스템에 부착된 모든 장치의 동작을 제어하고, 명령을 실행하는 장치다. 사람과 비교했을 때, CPU는 두뇌와 같은 역할을 하기에 컴퓨터의 핵심이며, 제어장치(control unit), 연산장치(arithmetic logic unit, 산술논리장치) 그리고 레지스터 로 구성되며, 이 구성장치들은 내부버스로 연결되어 있다.

(위의 그림처럼 관리자 역할을 하는 운영체제의 커널이 프로그램을 메모리에 올려 프로세스로 만들면 일꾼인 CPU가 처리한다.)

🔩 제어장치 : 컴퓨터에 있는 모든 장치들의 동작을 지시하고 제어하며, 명령과 입력, 출력 값을 처리하는 역할을 한다. 제어장치는 메모리에서 읽어 들인 명령어를 해독한 후, 작업을 해야 할 장치에 제어 신호를 보내서 작업을 수행하도록 지시한다.

🔩 연산장치 : 제어장치의 명령에 따라 실제로 연산을 수행한다. 두 숫자의 덧셈, 뺄셈과 같은 두 수의 산술연산과 참, 거짓의 판단과 같은 논리연산, 두 수의 크기를 비교하는 관계연산, 이동 등을 하는 디지털 회로이다.

🔩 레지스터 : 명령을 처리하는 데 사용하는 CPU 내부의 임시기억장치, 즉 메모리다. 레지스터는 CPU 내에서 처리해야할 명령어, 연산에 사용할 데이터, 연산 결과 데이터를 일시적으로 저장하는 곳이며 메모리 장치 중 가장 빠른 속도로 작동한다. CPU는 자체적으로 데이터를 저장할 방법이 없기 때문에 레지스터를 거쳐 데이터를 전달한다.

CPU의 연산 처리 과정
1. 제어장치가 메모리에 계산할 값을 로드한다. 또한 레지스터에도 로드한다.
2. 제어장치가 레지스터에 있는 값을 계산하라고 산술논리연산장치에 명령한다.
3. 제어장치가 계산된 값을 다시 '레지스터에서 메모리로' 저장한다.

2. 메모리 (Memory)

메모리는 전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치이다. 즉, 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 하고 이때 컴퓨터가 빠르게 작동하기 위해서는 메모리 속 명령어와 데이터가 중구난방으로 저장되어 있으면 안 된다.
컴퓨터의 기억 장치는 우리가 흔히 들어봤던 주기억 장치(RAM, ROM)와 보조 기억장치(HDD, SSD)로 나눌 수 있다.

위 표에서 보는 것처럼 CPU에 가까울수록 데이터를 더 빠르게 읽어올 수 있고, 보조 기억 장치가 있는 아래에서부터 CPU까지 데이터를 읽어오려면 훨씬 시간이 오래 걸리는 것을 알 수 있다.
🏭 공장에 비유하자면 CPU는 일꾼이고 메모리는 작업장이며, 작업장의 크기가 곧 메모리의 크기이다. 작업장이 클수록 창고에서 물건을 많이 가져다놓고 많은 일을 할 수 있듯이 메모리가 크면 클수록 많은 일을 동시에 할 수 있다.

3. DMA 컨트롤러 (Direct Memory Access)

I/O디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치
*I/O : Input & Output 입출력장치로, 키보드나 마우스 등을 말함.

  • CPU가 개입없이 메모리에서 읽거나 메모리에 쓸 수 있는 I/O 모듈 권한을 부여 받았다고 보면 된다.
  • DMA 모듈 자체는 메인 메모리와 I/O 장치 간의 데이터 교환을 제어한다.
  • CPU는 전송의 시작과 끝에만 관여하고 전체 블록이 전송 된 후에만 중단된다.
  • CPU에만 너무 많은 인터럽트(interrupt) 요청이 들어오기 때문에 CPU 부하를 막아주며, CPU의 일을 부담하는 보조 일꾼!

4. 디바이스 컨트롤러 (Device Controller)

컴퓨터와 연결되어 있는 I/O 디바이스들의 작은 CPU 를 말하며, 디바이스 컨트롤러 옆에 붙어 있는 로컬 버퍼(local buffer)는 각 디바이스에서 데이터를 임시로 저장하기 위한 작은 메모리를 뜻한다. 로컬 버퍼는 일종의 data register 라고 할 수 있다.
🏁 I/O는 실제 device와 로컬 버퍼 사이에서 일어나고 device controller는 I/O가 끝났을 경우 interrupt로 CPU에 그 사실을 알리게 된다.

이 중 CPU 만큼 중요한 메모리에 대해 더 알아봅시다!

3-2. 메모리


📍 출처
주홍철, [면접을 위한 CS 전공지식 노트]
https://bentist.tistory.com/65
[운영체제] 운영체제란? - 정의, 역할, 구조
운영체제란? 개념과 구조

📍 참고하면 좋을 사이트
https://choiyeonho903.tistory.com/58
https://bentist.tistory.com/62
개발자도 알면 좋은 DMA

profile
배움은 즐거워 ~(*ૂ❛ᴗ❛*ૂ)

0개의 댓글