운영체제 구조

tycode·2021년 4월 12일
0

C.S (Computer Science)

목록 보기
2/40
post-custom-banner

Application, OS, H/W 관계

도서관으로 비유하자면,

  • 운영체제 = 도서관
  • 응용 프로그램 = 시민
  • 컴퓨터 하드웨어 = 책
  • API = 신청서
  • 운영체제의 역할:
    • 시민 → 도서관에게 책(자원) 요청
    • 도서관 → 시민에게 책(자원) 빌려줌
    • 기한되면, 도서관이 책(자원) 회수.

실제로,

  • 운영체제는 응용 프로그램이 요청하는 메모리를 허가, 분배한다.
  • 운영체제는 응용 프로그램이 요청하는 CPU시간을 제공한다.
  • 운영체제는 응용 프로그램이 요청하는 IO Devices사용을 허가/제어한다.

운영체제는 사용자 인터페이스를 제공

  • 쉘(Shell) - 응용 프로그램
    • 사용자가 운영체제 기능과 서비스 조작할 수 있도록 인터페이스 제공하는 프로그램.
    • 쉘은 두 종류로 분류: 터미널 환경(CLI)과, GUI환경

사용자에게 인터페이스 제공하기 위해서 별도의 Shell 프로그램을 제공

운영체제는 응용 프로그램을 위해서도 인터페이스를 제공

  • API(Application Programming Interface) 형태로 제공
    • 함수로 제공한다
  • 보통은 라이브러리(Library) 형태로 제공
    • 운영체제에 요청할만한 API들을 묶어서 제공함. 간단하게, C Library. 대부분 운영체제가 처음에 API를 특정 언어용으로 만들어서 제공하고 가장 기본적인 언어가 C언어다 보니 C언어의 API로 제공한다.

전체적인 맥락에서 보면, API는 요청서들이다.
사용자/응용 프로그램이 OS에 자료를 요구할 때 내는 신청서들 같은 존재.

운영체제는 사용자와 응용 프로그램을 위해 인터페이스 제공

시스템 콜

운영체제는 시스템 콜을 제공

  • 시스템 콜 또는 시스템 호출 인터페이스
    • 운영체제가 운영체제 각 기능을 사용할 수 있도록 시스템 콜이라는 명령 또는 함수를 제공
    • API 내부에는 시스템콜을 호출하는 형태로 만들어지는 경우가 대부분이다.

즉,

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

전체적인 흐름을 보면

  1. 운영체제는 사용자든 응용 프로그램이든 외부에서 컴퓨터 하드웨어 자원을 쓰기 위해 필요한 요청서(시스템 콜)를 제공한다. 그런데 시스템 콜 사용법이 복잡하다.
  2. 그래서 편리를 위해, 해당 시스템 콜을 이용한 각 언어별 라이브러리(API)를 사용하여 운영체제 기능을 요청할 수 있는 인터페이스를 제공한다.
  3. 이 API를 묶어 놓은 라이브러리를 기반으로 해서 어플리케이션이나 쉘이라는 프로그램을 만든다.
  4. 사용자는 이 프로그램으로 컴퓨터를 사용한다.

중간 정리

  • 운영체제는 컴퓨터 하드웨어와 응용 프로그램을 관리한다.
  • 사용자 인터페이스를 제공하기 위해 쉘 프로그램을 제공한다.
  • 응용 프로그램이 운영체제 기능을 요청하기 위해서, 운영체제는 시스템 콜을 제공한다.
    • 보통 시스템 콜을 직접 사용하기 보다는, 해당 시스템 콜을 이용해서 만든 각 언어별 라이브러리(API)를 사용한다.

CPU Protection Rings

  • CPU도 권한 모드 가지고 있다. 2가지 모드.
    • 사용자 모드(user mode): 응용 프로그램이 사용
    • 커널 모드(kernel mode: OS가 사용. 특권 명령어 실행과 원하는 작업 수행을 위한 자원 접근을 가능하게 하는 모드.

시스템콜은 커널 모드로 실행

  • 커널 모드에서만 실행 가능한 기능들이 있음.
  • 커널 모드로 실행하려면, 응용 프로그램은 반드시 시스템 콜을 사용해야함(거쳐야함).
  • 그러면, 시스템 콜은 운영체제를 제공 해준다.

  • 응용 프로그램이 함부로 전체 컴퓨터 시스템을 헤치지 못함.

비유하자면,
등본은 동사무소에서 특별한 신청서를 써야함, 직원분은 특별한 권한을 가지고, 등본 출력 명령을 실행하고 발급을 해줌.

예시

사용자 프로그램 ⇄ 헤더 파일 ⇄ 커널

  • open()이라는 함수는 <unistd.h>라는 헤더 파일을 가지고 있는 라이브러리 안에 선언되어 있는 함수.
  • 헤더 파일 안에 open()이라는 함수가 선언되어 있고,
  • 결과적으로, open()코드 안에는 커널 안으로 들어가서 sys_open()함수를 호출하라도록 되어 있다.

마무리 정리

  • 운영체제는 시스템 콜 제공
  • 프로그래밍 언어별로 운영체제 기능을 활용하기 위해, 시스템 콜을 기반으로 API제공
  • 응용 프로그램은 운영체제 기능 필요시, 해당 API를 사용해서 프로그램을 작성
  • 응용 프로그램이 실행되서 → 운영체제 기능이 필요한 API를 호출하면 → 시스템 콜이 호출되서 → 커널모드로 변경되어 → OS 내부에서 해당 명령이 실행되고 → 다시 응용 프로그램으로 돌아간다.
post-custom-banner

0개의 댓글