컴퓨터 과학(CS)/운영체제

운영체제의 개념과 역할, 구조

Bentist 2022. 1. 14. 13:26

참고

Operating System Concepts 10th Edition

https://en.wikipedia.org/wiki/Terminal_(macOS)

운영체제 강의(KOCW 양희재 교수님)

 

컴퓨터 시스템은 크게 CPU, 메모리, 하드 디스크로 구성되어 있다고 볼 수 있다. 이 각각의 하드웨어를 연결했다고 해서 우리가 원하는 프로그램을 수행할 수 있는 것은 아니다. 이 컴퓨터라는 하드웨어에서 사용자가 프로그램들을 사용하려면 하드웨어와의 원활한 소통 수단(인터페이스)이 필요했다. 이를 위해 등장한 것이 운영체제다.

 

운영체제 의미와 커널

운영체제컴퓨터의 하드웨어를 관리하고, 하드웨어/사용자/소프트웨어를 매개하는 시스템 소프트웨어이다.

커널(Kernel)은 사전적인 의미인 '단단한 껍질 안의 씨앗'처럼 운영체제의 핵심이며, 모든 것을 통제하는 실체다. 커널은 소프트웨어로부터의 요청을 컴퓨터에 있는 하드웨어가 처리 할 수 있도록 요청을 변환하고, 여러 시스템 자원들을 관리한다.제어한다. 사실 운영체제 전부가 메모리에 상주하는 것이 아니다. 커널이 운영체제 중 항상 필요한 부분만 메모리에 올려서 자원을 관리한다. Linux 환경에서는 OS가 항상 메모리에 상주하기 때문에, Linux에서는 운영체제와 커널이 같다고 생각하면 된다.

  • 좁은 의미의 OS: 커널을 의미하며, 컴퓨터가 켜진 후 항상 메모리에 상주하는 운영체제의 핵심 부분
  • 넓은 의미의 OS: 커널을 포함해서 메모리에 상주하지 않는 다양한 유틸리티를 모두 포괄하는 개념

커널은 사용자나 응용프로그램이 컴퓨터 자원에 직접 접근하는 것을 막기 위해 커널 내부에 있는 fork() 시스템 호출을 사용하는데, 시스템 호출 혹은 시스템 콜(system call)커널이 제공하는 서비스나 자원에 접근하기 위한 인터페이스다. 사용자는 명령 해석기 을 사용해 시스템 호출을 거쳐 커널에 접근할 수 있다.

 

커널의 역사

초창기의 컴퓨터에서 운영체제 커널은 필수적인 것이 아니었다. 초기 프로그램은 하드웨어 추상화나 운영 체제의 지원을 받지 않고도 컴퓨터만으로 명령을 실행할 수 있었고, 다른 프로그램을 실행하기 위해서는 컴퓨터의 전원을 껐다가 켬으로써 다시 입력자료를 읽어들여야 하는 방식이었다. 이러한 과정이 반복되면서 사람들은 로더와 디버거 같은 작은 프로그램들이 상주해 있는 것이 다른 프로그램으로 교체하거나 새로운 프로그램을 개발하는 데 유리하다는 사실을 알게 되었다. 이와 같은 로더, 디버거들이 초기 운영 체제 커널의 기초가 되었다.

그림처럼 커널은 여러 프로그램들이 동작할 수 있도록 한정된 하드웨어 자원을 효율적으로 배분하고 관리한다.


컴퓨터 시스템 구조와 운영체제의 역할

컴퓨터 시스템의 구조는 하드웨어(I/O장치CPU, 메모리), 시스템 소프트웨어, 응용 소프트웨어로 나뉜다.

운영체제는 정부와 비슷하다. 정부 그 자체만으로는 쓸모있는 기능을 못하지만, 사람들에게 더 나은 환경을 제공한다. 마찬가지로 운영체제는 프로그램들이 유용한 일을 할 수 있는 환경을 제공한다. 운영체제의 역할은 사용자 관점(User View)과 시스템 관점(System View)으로 나눠볼 수 있다.


1. 운영체제의 역할

1) 사용자관점(User View)

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

 

2) 시스템 관점(System View)

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


2. 운영체제 시스템 구조

우리의 뇌는 동시에 두 가지 생각을 못한다. 컴퓨터의 CPU 역시 동시에 프로세스를 실행하지 못한다. 하지만 CPU 스케줄링이라는 과정을 통해 여러 개의 프로세스를 동시에 실행하는 것처럼 처리할 수 있다.

🔎 CPU 스케줄링

메모리에 있는 여러 프로세스 중 어떤 프로세스부터 CPU가 먼저 실행할 지 결정하기 위한 프로세스 처리 방식이다.

 

비선점, 선점 스케줄링

  • 비선점 스케줄링: 하나의 프로세스가 CPU를 할당 받으면, 작업 종료 후 CPU 반환 시까지 다른 프로세스가 CPU를 점유할 수 없는 스케줄링 방식
  • 선점 스케줄링: 시분할 시스템에서 타임 슬라이스가 소진되었거나 인터럽트나 시스템 호출 종료 시에 더 높은 우선 순위 프로세스가 발생 되었음을 알았을 때, 현 실행 프로세스로부터 강제로 CPU를 회수하는 방식

라운드 로빈 스케줄링

시분할 시스템을 위해 설계된 선점형 스케줄링의 하나로, 프로세스들 사이에 우선순위를 두지 않고 순서대로 시간단위(Time Quantum, Slice)로 CPU를 할당하는 방식이다.

라운드 로빈은 가슴이 붉은 새인 로빈에게서 유래되었다. 로빈은 새에게 먹이를 줄 때 순서대로 준다. 즉, 자식이 5마리면 먹이를 작게 잘라 순서대로 주고, 순서가 끝난다면 다시 처음부터 먹이를 또 순서대로 준다. 쉽게 말해 라운드 로빈은 '기회를 차례대로 받기'라고 이해해도 좋다.

CPU에게 할당된 총 프로세스들의 작업 시간을 여러 개로 나눠, 각 프로세스에 일정시간을 할당하고 각 프로세스는 할당된 시간만 실행한 후 우선 순위가 맨 뒤로 밀려나 각 프로세스들이 공정하게 CPU 자원을 할당받게 된다.

 

1) 다중(멀티) 프로그래밍 시스템: 주 기억장치에 다수의 프로그램 적재

한번에 하나의 프로그램이 수행되는 일괄처리 시스템의 단점을 보완하기 위해 등장했다. 주 기억장치에 다수의 프로그램을 기억시켜 놓고 CPU의 유휴 시간에 다른 프로그램을 실행할 수 있는 시스템이다. 하나의 프로세스가 CPU를 필요로 하지 않는 순간 CPU를 필요로 하는 다른 프로세스로 교체해줌으로써 CPU의 이용률을 높일 수 있다.

다중 프로그래밍 운영체제는 기억장치에 있는 작업들 중에서 하나를 택해 작업을 실행하기 시작한다. 이 작업들 중에 하나를 선택하기 위한 결정이 필요한데, 이것이 위에서 설명한 CPU 스케줄링의 존재 이유다.

다중 프로그래밍의 한계

이와 같이 다중 프로그래밍 시스템은 시스템 자원을 효율적으로 이용하는 것이 목적이지만, 컴퓨터 시스템을 이용하는 사용자의 관점이 반영되어 있지 않다. 이 문제를 해결하기 위한 개념이 시분할이다. 시분할도 다중 프로그래밍을 확장한 개념으로 다수의 프로그램을 짧은 시간 간격으로 번갈아 수행하며 사용자와의 응답성을 높이기 위해 등장하였다.

 

2) 시분할 시스템

다른 말로는 멀티태스킹(Multitasking)이라고도 부른다. 시분할 시스템은 다중프로그래밍을 전제로 라운드 로빈 스케줄링을 이용해서 다중 사용자들에게 하나의 CPU 자원을 시간적으로 분할하여 사용할 수 있게 해 준다. 시분할 운영 체제는 많은 사용자들이 하나의 컴퓨터를 공유하도록 한다. 시분할 시스템은 라운드 로빈 스케줄링을 통해 한 사용자에서 다음 사용자로 빠르게 전환함으로써 각 사용자에게 자신만이 컴퓨터를 사용하고 있는 것과 같은 착각을 주지만, 실제로는 여러 사용자가 하나의 컴퓨터를 공유하여 사용하고 있는 것이다.

한 사용자의 입장에서는 프로세스들이 빠르게 번갈아가며 실행되기 때문에 마치 여러 개의 작업들이 동시에 작동하는 것처럼 보이게 된다.

 

🔎 다중 프로그래밍과 시분할 시스템의 차이

다중 프로그래밍이 CPU 이용을 최대화하는 것이 목표라면, 시분할 시스템은 각 작업에 대한 응답시간을 최소화하는 것이 목표기 때문에 시분할 시스템은 프로세스의 작업 교체 빈도가 훨씬 많다.


3) 현대의 운영체제: 인터럽트 기반 시스템(Interrupt based system)

https://bentist.tistory.com/66

 

현대의 운영체제: 인터럽트 기반 시스템, 컴퓨터 버스

컴퓨터의 전원을 켜면 먼저, POST 과정이 시작되고 그 후에 부트 로더가 하드 디스크에 있는 운영체제 프로그램을 RAM으로 가져와 할당한다. 할당된 운영체제의 커널은 컴퓨터의 전원이 꺼질 때까

bentist.tistory.com


3. 유저 모드와 커널 모드

운영체제는 사용자가 함부로 운영체제의 중요한 시스템에 접근하지 못하도록 모드(Mode)를 나눠두었다.

유저 모드(User mode)와 커널 모드(Kernel mode)가 그것이며, 하드웨어의 모드 비트(Mode bit)가 0은 커널 모드, 1은 유저 모드임을 가리킨다. 이러한 이중 모드(Dual-mode) 방식을 사용하면 나쁜 의도를 가진 사용자로부터 운영체제, 하드웨어를 비롯한 시스템과 사용자를 보호할 수 있다. 하드웨어는 커널 모드일 때만 특권 명령(Privileged instructions)를 실행한다. 만약 유저 모드에서 특권 명령을 실행하려 한다면 하드웨어는 이 동작을 막고 운영체제에게 트랩을 보낼 것이다. 유저 모드에서도 커널 모드의 기능을 호출하고 싶다면 시스템 콜(System call)이라는 인터페이스를 통해야 한다.

 


4. 셸(Shell), 사용자와 커널의 인터페이스

은 운영체제 안에서 사용자가 커널과 통신할 수 있는 인터페이스이다. 셸(껍데기)은 운영 체제의 내부(커널)을 감싸고있기 때문에 껍데기라는 이름이 붙었다. 사용자가 입력한 명령어를 커널이 이해할 수 있도록 변환해주는 역할을 하기 때문에 명령어 해석기(Command interpreter)라고도 부른다.

그래서 사용자가 명령어를 입력하게 되면 컴퓨터 내부에서는 Shell이 명령어를 해석하여 커널(Kernel)에게 전달하면 커널은 하드웨어를 조작하고 수행된 결과를 다시 Shell이 해석하여 사용자에게 보여준다. Shell을 사용하면 커널의 복잡한 동작 방식을 알 필요 없이 쉘 상의 인터페이스로 시스템 자원들을 쉽게 관리할 수 있다. 이것이 바로 쉘이 탄생한 이유이기도 하다.

 

Shell 종류: CLI, GUI

셸은 일반적으로 명령 줄과 그래픽 형의 두 종류로 분류된다. 명령 줄(CLI) 셸사용자가 컴퓨터 키보드 등을 통해 문자열의 형태로 명령 줄을 입력하여 셸과 상호 작용하는 장치이다. 그래픽(GUL) 셸은 명령 줄 없이 사용자가 창, 아이콘, 메뉴와 같은 그래픽 요소를 사용하여 셸과 상호 작용하는 장치이다.

 

  • CLI(Command-line interface) 셸: 유닉스 bash, 윈도우의 cmd, 맥 OS terminal(zsh)
  • GUI(graphical user interface) 셸: 윈도우 아이콘

ShellTerminal이 헷갈릴 수도 있는데, Terminal정확한 정의를 보면 컴퓨터 시스템에서 텍스트를 입·출력하는 단말기로 하드웨어 장치라고 나온다. 즉, 터미널운영체제에 text-based access를 제공하는 단말기에 불과하다.

터미널의 의미 확장

리눅스, 맥OS에서 기본적으로 제공되는 터미널물리적 단말기를 소프트웨어로 구현한 애플리케이션이다. 그래서 터미널명령줄을 입력할 수 있는 장치이고, 터미널에 명령어를 입력하면 Shell명령어를 해석해서 커널에게 전달한다.

  • 프롬프트: 터미널의 명령줄 대기 모드