[혼공컴운] Ch09 운영체제 시작하기

Hyunjoon Choi·2023년 7월 30일
0

혼공컴운

목록 보기
9/15

📢 본 글은 혼공학습단 미션과 함께 정리해보는 글 입니다.

운영체제를 알아야 하는 이유

지금까지는 컴퓨터 구조와 다양한 컴퓨터 부품들의 동작 원리를 익혔다면, 이제는 그 부품들을 실제로 동작할 수 있도록 해 주는 운영체제에 대해 알아볼 차례이다.

운영체제

컴퓨터 부품들은 전기를 공급한다고 해서 바로 돌아갈 수는 없다.
자원: 프로그램이 실행을 위해 필요로 하는 모든 것들
⇒ 지금까지 배운 컴퓨터의 네 가지 핵심 부품이 포함됨
그러나 하드웨어적 자원만을 자원이라 칭하지는 않음
운영체제는 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이다.

커널 영역과 사용자 영역

이전에 배운 내용을 보면, 현재 실행중인 프로그램은 메모리에 적재된다고 하였다. 운영체제 또한 프로그램이기 때문에, 메모리의 커널 영역에 적재된다.

운영체제는 너무나 중요한 역할을 하기 때문에 별도의 장소에 보관되고, 이 영역을 커널 영역이라고 한다.
이 외에 사용자가 일반적으로 사용하는 프로그램들은 사용자 영역에 적재되며, 이러한 프로그램들을 응용 프로그램이라고 한다.

메모리 관리 기능

운영체제는 응용 프로그램들을 실행할 때 특정 번지에 할당하도록 하는 역할을 한다. 즉, 메모리 관리를 한다.

CPU 관리 기능

운영체제는 CPU 또한 관리한다. CPU는 여러 개의 프로그램을 우리가 인지하지 못할 속도로 빠르게 번갈아가며 실행하는 역할을 하는데, 이때 어떤 프로그램이 먼저 실행해야 할지, 어떤 프로그램이 CPU를 먼저 사용해야 할지 등을 관리해준다.

입출력장치 관리 기능

운영체제는 입출력장치 관리 기능도 가지고 있다. 예를 들어 한 번에 하나의 프로세스만 접근 가능한 프린터만 있다고 가정했을 때, 워드 프로세서가 이미 사용하고 있다면 메모장이 기다리도록 막는 역할 등도 할 수 있다. 또는 보조기억장치에 있는 보들을 파일, 폴더로 관리할 수도 있다.

정의

정의를 내리자면, 운영체제는 응용 프로그램과 하드웨어 사이에 위치해서 이 둘을 연결해주는 프로그램이라고 할 수 있으며, 사회에서의 정부와 비교되곤 한다. 자원을 어떻게 효율적으로 관리할 수 있는지 도와주는 역할을 하기 때문이다.

만약 운영체제가 없이 프로그램을 개발하려면, 하드웨어에 접근하는 코드 등도 직접 개발해야 한다.

정리

  • 운영체제는 사용자를 위한 프로그램은 아니고, 프로그램을 위한 프로그램이다.
  • 때문에 프로그램을 만드는 개발자는 운영체제에 대해 알아야 한다.
  • 우리가 만든 프로그램에 문제가 생긴다면 해당 문제는 하드웨어와 맞닿아있는 운영체제가 바로 알아차릴 수 있다.
  • 운영체제는 프로그램이기 때문에 오류 메시지를 줄 수 있는데, 이 메시지를 이해하는 과정에서 문제 해결 능력을 키울 수도 있으며 운영체제를 알아야만 이해할 수 있는 메시지들도 있다.

운영체제의 큰 그림

우리가 만든 프로그램들은 운영체제의 도움을 받으며 실행될 수 있다.

커널

운영체제는 현존하는 프로그램 중 규모가 가장 큰 프로그램이고, 그 종류 또한 다양하다.

그럼에도 가장 핵심적인 서비스 (공통적인 서비스 - 자원 접근 및 조작 기능 등)는 존재한다.

이렇게 운영체제의 핵심 서비스를 담당하는 부분을 커널이라고 한다.

이와 반대로, 운영체제에는 속하지만 커널에 속하지 않는 기능으로는 유저 인터페이스 (UI - User Interface) 등이 있다.

이중 모드와 시스템 콜

사용자가 실행하는 일반적인 프로그램들은 자원에 직접 접근할 수 없으며, 만약 이것이 가능하다면 매우 위험한 상황이 발생할 수 있다. 예시로 한 프로그램이 CPU를 쓰고 있는데 다른 프로그램이 빼앗으려고 하거나, SSD에 보관한 내용이 덮어씌워질 수 있기 때문이다.

이 때문에 운영체제는 응용 프로그램들이 자원에 접근하려 할 때 자신을 통해서만 접근이 가능하도록 하여 자원을 보호한다. (문지기 역할 - 이중 모드를 활용)

이중 모드

이중 모드는 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다.

사용자 모드

  • 운영체제 서비스를 제공받을 수 없는 실행 모드
  • 커널 영역의 코드를 실행할 수 없는 실행 모드
  • 자원 접근 불가

커널 모드

  • 운영체제의 서비스를 제공받을 수 있는 실행 모드
  • 자원 접근을 비롯한 모든 명령어 실행 가능

이때, 모드의 표현은 슈퍼바이저 플래그로 확인 가능하다. 1일 경우 커널 모드, 0일 경우 사용자 모드를 뜻한다.

시스템 콜 (System call)

  • 커널 모드로 전환하여 실행하기 위해 호출한다.
  • 운영체제에게 보내는 요청이다.
  • 일종의 소프트웨어 인터럽트이기 때문에 하드웨어 인터럽트 처리 방식과 유사하다.
  • 프로그램은 커널 모드와 사용자 모드를 번갈아가며 실행된다.

운영체제의 핵심 서비스

프로세스 관리

  • 프로세스는 곧 실행 중인 프로그램을 뜻한다.
  • 수많은 프로세스들이 동시에 (매우 빠르게 전환) 실행된다. 이에 따라 동시다발적으로 생성, 실행, 삭제되는 다양한 프로세스를 일목요연하게 관리할 필요가 있다.

자원 접근 및 할당

  • CPU 스케줄링을 통해 어떤 프로세스를 먼저, 얼마나 오래 실행할 지 제어 가능하다.
  • 페이징, 스와핑 등을 통해 메모리의 어느 부분에 적재할 지를 고려할 수 있다.
  • 인터럽트 서비스 루틴을 통해 프로그램이 입출력장치를 사용하고자 할 때 어떻게 접근할 수 있도록 할 것인지를 정할 수 있다.

파일 시스템 관리

  • 관련된 정보를 파일이란느 단위로 저장 장치에 보관할 수 있다.
  • 파일들을 묶어 폴더 단위로 저장 장치에 보관할 수 있다.

부족하거나 보완할 점이 있다면 댓글 부탁드립니다 😃

profile
개발을 좋아하는 워커홀릭

1개의 댓글

comment-user-thumbnail
2023년 7월 30일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기