# 03. 운영체제 구조

* 응용프로그램 <=> 운영체제 <=> 하드웨어(시스템 리소스)관계
  * 도서관으로 비유
    * 시민: 응용프로그램
    * 도서관: 운영체제
    * 책: 하드웨어
  * 운영체제 역할
    * 시민은 원하는 책(자원)을 요청
    * 도서관은 적절한 책(자원)을 시민에게 빌려줌
    * 기한이 다 되면 도서관이 해당 책(자원)을 회수함
  * 관계
    * 운영체제는 응용프로그램이 요청하는 메모리를 허가 및 분배
    * 운영체제는 응용프로그램이 요청하는 CPU 시간 제공
    * 운영체제는 응용프로그램이 요청하는 I/O Device 사용을 허가/제어
  * 사용자 , 응용프로그램, 운영체제, 컴퓨터 하드웨어와 관계

* 운영체제는 사용자 인터페이스 제공
  * **쉘(Shell)**
    * 사용자가 운영체제 기능과 서비스를 조작할 수 있도록 인터페이스 제공하는 프로그램
    * CLI와 GUI 환경 두 종류로 분류

* 운영체제는 응용 프로그램을 위해서도 인터페이스를 제공
  * API (Application Programming Interface)
    * 함수로 제공
    * open()
  * 보통은 라이브러리(library) 형태로 제공
    * C library
  * **시스템콜**&#x20;
    * 시스템 콜 또는 시스템 호출 인터페이스
    * 운영체제가 운영체제 각 기능을 사용할 수 있도록 시스템 콜이라는 명령 또는 함수 제공
    * API 내부에서는 시스템콜을 호출하는 형태로 만들어지는 경우가 대부분

      > API: 각 언어별 운영체제 기능 호출 인터페이스 함수(각 언어별 인터페이스)\
      > 시스템 콜: 운영체제 기능을 호출하는 함수

* 운영체제를 만든다면
  * 운영체제 개발(kernel)
  * 시스템콜
  * API(library)개발
  * Shell 프로그램 개발
  * 응용프로그램 개발

* 정리
  * 운영체제는 응용프로그램과 HD을 관리한다.
  * 사용자 인터페이스를 제공하기 위해 Shell을 제공한다.
  * 응용 프로그램이 운영체제 기능을 요청하기 위해, 시스템 콜을 제공한다.
    * 보통 시스템 콜을 직접사용하기보다는, 해당 시스템 콜을 사용해서 &#x20;

      만든 각 언어별 라이브러리(API)를 사용한다.

* CPU Protection Rings
  * CPU도 권한 모드라는 것을 가지고 있다.
    * **사용자 모드 (user mode)**
      * 응용프로그램이 사용&#x20;
    * **커널 모드(kernel mode)**
      * 특권 명령어 실행과 원하는 작업 수행을 위한 자원 접근을 가능케 하는 모드
      * OS가 사용
    * intel CPU 기준으로 설명(back단)
      * Ring 3, Level 3: User mode
      * Ring 0, Level 0: Kernel mode&#x20;

        > 쉬어가기\
        > Kernel : (견과류, 씨앗의)알맹이, 핵심\
        > Shell : 껍데기

* 시스템 콜은 커널 모드로 실행
  * 커널 모드에서만 실행 가능한 기능들이 있음
  * 커널 모드로 실행하려면, **반드시 시스템 콜을 사용 해야 함**(거쳐야함)
  * 시스템 콜은 운영체제 제공

* 사용자 모드와 커널 모드
  * 함부로 응용프로그램이 전체 컴퓨터 프로그램을 헤치지 못함
  * 마치 주민등록 등본은 꼭 동사무소 또는 민원 24시에서 특별한 신청서 써야 발급 되는 원리
    * 동사무소 직원분들은 **특별한 권한**을 가지고, 주빈등록등본 출력 명령을 실행

* 정리
  * 운영체제는 시스템 콜 제공
  * 프로그래밍 언어 별로 운영체제 기능을 활용하기 위해 시스템 콜을 기반으로 API제공
  * 응용프로그램은 운영체제 기능 필요 시, 해당 API를 사용해서 프로그램 작성
  * 응용프로그램이 실행 되서 운영체제 기능이 필요한 API를 호출하면 &#x20;

    &#x20; 시스템 콜이 호출 되서, 커널 모드로 변경되어 &#x20;

    &#x20; OS 내부에서 해당 명령이 실행되고 &#x20;

    &#x20; 다시 응용프로그램으로 돌아간다.
