Computer Science
[컴퓨터구조와 운영체제] [Chapter 09]운영체제 시작하기
우지uz
2023. 9. 13. 17:40
노션 링크: https://www.notion.so/Chapter-09-9b3a5a309a2a43e8b05d6e29746c2714?pvs=4
[ Chapter 09 ] 운영체제 시작하기
- 관리할 자원별로, 기능을 나누어서 관리한다. (CPU 관리, Process
- 운영체제가 무엇인지 이해합니다
- 개발자가 운영체제를 알아야 하는 이유를 알아봅니다.
- 커널이 무엇인지 학습합니다
- 시스템 호출과 이중 모드에 대해 이해합니다
- 운영체제가 제공하는 핵심 서비스의 종류를 학습합니다.
[09-1]운영체제란
- 시스템 자원 : 프로그램 실행에 마땅히 필요한 요소들.
- CPU, 메모리, 보조기억장치, 입출력장치 등과 같은 컴퓨터 부품들
운영체제란?
- 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램
- 운영체제는 매우 특별한 프로그램이기 때문에, **커널 영역(kernel space)**이라는 공간에 따로 적재되어 실행된다.
- 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하여 지속적으로 메모리 자원을 관리한다.
- 여러 응용 프로그램들을 어떤 순서로, 얼마나 오랫동안 CPU를 이용하게 할지를 결정하는 게 운영체제이다.
- 어느 한 프로그램이 CPU 를 독점하지 못하도록, 최대한 공정하게 여러 프로그램에 CPU 자원을 할당시킨다.
- [응용 프로그램 ↔운영체제↔ 하드웨어] 사이에서 , 응용 프로그램에 필요한 자원을 할당하고, 응용 프로그램이 올바르게 실행되도록 관리하는 역할을 맡는다.
- 응용 프로그램에 자원을 효율적으로 분배하고, 실행할 프로그램들이 지켜야 할 규칙을 만들어 컴퓨터 시스템 전체를 관리한다.
- 관리할 자원별로, 기능을 나누어서 관리한다. (CPU 관리, Process 관리, 파일 시스템 관리, 메모리 관리 …)
- 커널 영역을 제외한 나머지 영역을 사용자 영역(user space) 라고 한다.
응용 프로그램(application software)이란
- 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램을 의미한다.
- 인터넷 브라우저, 메모장, 게임, 어플리케이션 등이 이에 해당한다.
운영체제를 알아야 하는 이유
- 운영체제가 하드웨어를 조작하고 관리하는 기능들을 제공하기 때문이다.
- 우리는 하드웨어를 조작하는 코드를 직접 작성하는 것이 아니라, 운영체제의 도움을 받아 간편하게 개발해야 하기 때문이다.
- 운영체제가 건네는 말(컴퓨터언어)을 제대로 이해할 수 있다.
- 운영체제에 정확하고 제대로 명령할 수 있다.
- 결과적으로 하드웨어와 프로그램을 더 깊이 이해할 수 있다.
- 개발자들이 접하게 될 대다수의 오류 메세지의 근원 = 운영체제 이다
[09-2]운영체제의 큰 그림
운영체제의 심장, 커널(kener) = 운영체제의 핵심 서비스
- 시스템 자원에 접근하고 조작하는 기능을 담당한다.
- 프로그램이 올바르고 안전하게 실행되게 한다.
- Window OS, Mac OS, IPhone OS 등 다양한 운영체제가 존재한다.
사용자 인터페이스
- 커널에 포함되지 않는 운영체제가 제공하는 서비스이다.
- 윈도우의 바탕화면과 같이 , 사용자가 컴퓨터와 상호작용 할 수 있는 통로이다.
- 그래픽 유저 인터페이스(GUI : graphical User Interface)
- 윈도우 바탕화면, 스마트폰 화면과 같이, 그래픽을 기반으로 컴퓨터와 상호작용 할 수 있는 인터페이스
- 커맨드 라인 인터페이스(CLI : Command Line Interface)
- 명령어를 기반으로 컴퓨터와 상호작용할 수 있는 인터페이스 : Terminal , Homebrew, python, Git 등등
- Chat GPT : Mac OS 에서 Terminal 이외에도 CLI 가 존재할까??
- iTerm2: iTerm2는 터미널의 대체 애플리케이션으로, macOS에서 강력한 터미널 기능을 제공합니다. 터미널보다 더 많은 기능과 사용자 정의 옵션을 제공합니다.
- XQuartz: XQuartz는 macOS에서 X 윈도 시스템을 지원하고 X11 애플리케이션을 실행할 수 있는 CLI 환경을 제공합니다.
- 커맨드 라인 툴: macOS는 다양한 CLI 도구를 포함하고 있습니다. 예를 들어, Git, Homebrew, Python, Ruby, Node.js, 그리고 다른 프로그래밍 언어와 관련된 CLI 도구를 설치하고 사용할 수 있습니다.
- SSH: Secure Shell (SSH)를 사용하여 원격 서버 또는 다른 컴퓨터에 CLI로 연결할 수 있습니다. 이를 통해 원격 시스템에서 명령어를 실행하고 파일을 전송하거나 관리할 수 있습니다.
- Docker: Docker는 컨테이너화된 응용 프로그램을 관리하기 위한 CLI 도구를 제공합니다.
- 네, macOS에서는 터미널 이외에도 Command Line Interface (CLI)를 사용할 수 있는 다른 옵션들이 있습니다. 가장 일반적인 CLI 도구 중 하나는 터미널 애플리케이션 내에서 사용되는 것이지만, 몇 가지 다른 옵션도 있습니다.
- 그래픽 유저 인터페이스(GUI : graphical User Interface)
- 종류
이중 모드와 시스템 호출
- 운영 체제는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다.
- 운영 체제는 응용 프로그램들이 자원에 접근하려고 할 때, 오직 자신을 통해서만 접근하도록하여 자원을 보호한다. 일종의 문지기 역할이다.
- 운영체제 코드를 실행하려고 한다 = 운영체제에 도움을 요청한다.
운영체제의 문지기 역할 = 이중 모드
- CPU가 명령어를 실행하는 모드를 크게 사용자모드와 커널모드로 구분하는 방식
사용자 모드 (User Mode)
- 운영체제 서비스를 제공받을 수 없는 실행 모드
- 커널 영역의 코드를 실행할 수 없는 모드
- 사용자 모드로 실행되는 응용프로그램은 시스템 자원에 접근할 수 없다.
커널 모드 (Kenel Mode)
- 운영체제 서비스를 제공받을 수 있는 실행 모드
- 커널 모드로 실행되는 응용 프로그램은 시스템 자원에 접근할 수 있다.
시스템 호출 (system call)
- 프로그램이 [ 사용자 모드 → 커널 모드 ]
- 인터럽트 중에서도 소프트웨어적인 인터럽트