Computer Science

[컴퓨터구조와 운영체제] [Chapter 09]운영체제 시작하기

우지uz 2023. 9. 13. 17:40

노션 링크: https://www.notion.so/Chapter-09-9b3a5a309a2a43e8b05d6e29746c2714?pvs=4

 

[ Chapter 09 ] 운영체제 시작하기

  1. 관리할 자원별로, 기능을 나누어서 관리한다. (CPU 관리, Process
  • 운영체제가 무엇인지 이해합니다
  • 개발자가 운영체제를 알아야 하는 이유를 알아봅니다.
  • 커널이 무엇인지 학습합니다
  • 시스템 호출과 이중 모드에 대해 이해합니다
  • 운영체제가 제공하는 핵심 서비스의 종류를 학습합니다.

[09-1]운영체제란

  1. 시스템 자원 : 프로그램 실행에 마땅히 필요한 요소들.
    1. CPU, 메모리, 보조기억장치, 입출력장치 등과 같은 컴퓨터 부품들

운영체제란?

  1. 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
  2. 운영체제는 매우 특별한 프로그램이기 때문에, **커널 영역(kernel space)**이라는 공간에 따로 적재되어 실행된다.
  3. 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하여 지속적으로 메모리 자원을 관리한다.
  4. 여러 응용 프로그램들을 어떤 순서로, 얼마나 오랫동안 CPU를 이용하게 할지를 결정하는 게 운영체제이다.
  5. 어느 한 프로그램이 CPU 를 독점하지 못하도록, 최대한 공정하게 여러 프로그램에 CPU 자원을 할당시킨다.
  6. [응용 프로그램 ↔운영체제↔ 하드웨어] 사이에서 , 응용 프로그램에 필요한 자원을 할당하고, 응용 프로그램이 올바르게 실행되도록 관리하는 역할을 맡는다.
  7. 응용 프로그램에 자원을 효율적으로 분배하고, 실행할 프로그램들이 지켜야 할 규칙을 만들어 컴퓨터 시스템 전체를 관리한다.
  8. 관리할 자원별로, 기능을 나누어서 관리한다. (CPU 관리, Process 관리, 파일 시스템 관리, 메모리 관리 …)
  • 커널 영역을 제외한 나머지 영역을 사용자 영역(user space) 라고 한다.

응용 프로그램(application software)이란

  1. 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램을 의미한다.
  2. 인터넷 브라우저, 메모장, 게임, 어플리케이션 등이 이에 해당한다.

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

  1. 운영체제가 하드웨어를 조작하고 관리하는 기능들을 제공하기 때문이다.
  2. 우리는 하드웨어를 조작하는 코드를 직접 작성하는 것이 아니라, 운영체제의 도움을 받아 간편하게 개발해야 하기 때문이다.
  3. 운영체제가 건네는 말(컴퓨터언어)을 제대로 이해할 수 있다.
  4. 운영체제에 정확하고 제대로 명령할 수 있다.
  5. 결과적으로 하드웨어와 프로그램을 더 깊이 이해할 수 있다.
  6. 개발자들이 접하게 될 대다수의 오류 메세지의 근원 = 운영체제 이다

[09-2]운영체제의 큰 그림

운영체제의 심장, 커널(kener) = 운영체제의 핵심 서비스

  1. 시스템 자원에 접근하고 조작하는 기능을 담당한다.
  2. 프로그램이 올바르고 안전하게 실행되게 한다.
  3. Window OS, Mac OS, IPhone OS 등 다양한 운영체제가 존재한다.

사용자 인터페이스

  • 커널에 포함되지 않는 운영체제가 제공하는 서비스이다.
  • 윈도우의 바탕화면과 같이 , 사용자가 컴퓨터와 상호작용 할 수 있는 통로이다.
    1. 그래픽 유저 인터페이스(GUI : graphical User Interface)
      • 윈도우 바탕화면, 스마트폰 화면과 같이, 그래픽을 기반으로 컴퓨터와 상호작용 할 수 있는 인터페이스
    2. 커맨드 라인 인터페이스(CLI : Command Line Interface)
      • 명령어를 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스 : Terminal , Homebrew, python, Git 등등
      • Chat GPT : Mac OS 에서 Terminal 이외에도 CLI 가 존재할까??
        1. iTerm2: iTerm2는 터미널의 대체 애플리케이션으로, macOS에서 강력한 터미널 기능을 제공합니다. 터미널보다 더 많은 기능과 사용자 정의 옵션을 제공합니다.
        2. XQuartz: XQuartz는 macOS에서 X 윈도 시스템을 지원하고 X11 애플리케이션을 실행할 수 있는 CLI 환경을 제공합니다.
        3. 커맨드 라인 툴: macOS는 다양한 CLI 도구를 포함하고 있습니다. 예를 들어, Git, Homebrew, Python, Ruby, Node.js, 그리고 다른 프로그래밍 언어와 관련된 CLI 도구를 설치하고 사용할 수 있습니다.
        4. SSH: Secure Shell (SSH)를 사용하여 원격 서버 또는 다른 컴퓨터에 CLI로 연결할 수 있습니다. 이를 통해 원격 시스템에서 명령어를 실행하고 파일을 전송하거나 관리할 수 있습니다.
        5. Docker: Docker는 컨테이너화된 응용 프로그램을 관리하기 위한 CLI 도구를 제공합니다.
        macOS는 Unix 기반 운영 체제이므로 기본적으로 다양한 CLI 도구와 옵션을 지원합니다. 사용하려는 작업 및 요구 사항에 따라 적합한 CLI 도구를 선택할 수 있습니다.
      • 네, macOS에서는 터미널 이외에도 Command Line Interface (CLI)를 사용할 수 있는 다른 옵션들이 있습니다. 가장 일반적인 CLI 도구 중 하나는 터미널 애플리케이션 내에서 사용되는 것이지만, 몇 가지 다른 옵션도 있습니다.
  • 종류

이중 모드와 시스템 호출

  • 운영 체제는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다.
  • 운영 체제는 응용 프로그램들이 자원에 접근하려고 할 때, 오직 자신을 통해서만 접근하도록하여 자원을 보호한다. 일종의 문지기 역할이다.
  • 운영체제 코드를 실행하려고 한다 = 운영체제에 도움을 요청한다.

운영체제의 문지기 역할 = 이중 모드

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

사용자 모드 (User Mode)

  • 운영체제 서비스를 제공받을 수 없는 실행 모드
  • 커널 영역의 코드를 실행할 수 없는 모드
  • 사용자 모드로 실행되는 응용프로그램은 시스템 자원에 접근할 수 없다.

커널 모드 (Kenel Mode)

  • 운영체제 서비스를 제공받을 수 있는 실행 모드
  • 커널 모드로 실행되는 응용 프로그램은 시스템 자원에 접근할 수 있다.

시스템 호출 (system call)

  • 프로그램이 [ 사용자 모드 → 커널 모드 ]
  • 인터럽트 중에서도 소프트웨어적인 인터럽트