패스트캠퍼스

[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 32회차 미션

돌맹이시터 2020. 11. 19. 22:35

 

 

 

환급미션 32일째..

 

 

 

 

운영체제 - 운영체제 핵심 개념 잡기 - 08. 운영체제 구조 - 시스템콜

운영체제 - 운영체제 핵심 개념 잡기 - 09. 운영체제 구조 - 사용자 모드와 커널 모드

 

 

 

응용 프로그램, 운영체제, 컴퓨터 하드웨어(시스템 리소스) 관계

도서관으로 비유

운영체제 : 도서관

응용 프로그램 : 시민

컴퓨터 하드웨어 : 책

-> 시민은 도서관에 원하는 책(자원) 요청, 도서관은 적절한 책을 찾아서 시민에게 빌려줌, 기한이 다 되면 도서관이 해당 책 회수

 

-> 운영체제는 응용프로그램이 요청하는 메모리를 허가, 분배하고, cpu 시간을 제공하며, IO Device 사용을 허가/제어한다.

 

 

 

 

- 사용자, 응용프로그램, 운영체제, 컴퓨터 하드웨어 간의 관계

 

 

 

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

 

쉘(shell)

사용자가 운영체제 기능과 서비스를 조작할 수 있도록 인터페이스를 제공

쉘은 터미널 환경(CLI), GUI 환경 두 종류로 분류

 

위 그림에서 보는것과 같이 쉘 역시 하나의 응용프로그램이기도 하다.

 

 

 

 

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

 

 

 

API (Application Programming Interface)

•함수로 제공

•open() 

 

보통은 라이브러리(library) 형태로 제공

•C library

•https://www.gnu.org/software/libc/ 

-> 운영체제는 운영체제 기능을 사용자나 app이 사용할 수 있도록 신청서를 API 형태로 제공해준다?

 

 

시스템 콜

•시스템 콜 또는 시스템 호출 인터페이스

•운영체제가 운영체제 각 기능을 사용할 수 있도록 시스템 콜이라는 명령 또는 함수 제공

•API 내부에는 시스템콜을 호출하는 형태로 만들어지는 경우가 대부분

https://www.gnu.org/software/libc/ (system call 문서 참조)

 

 

 

 

컴퓨터 사용 요청을 하면,

system call을 제공

기본적으로 시스템콜은 운영체제 입장에서 기능을 정의해둔 것이라 프로그래밍 차원에서는 복잡할 수 있다.

 

그런 부분을 완화하는 측면에서 API 형태로, 각 언어별로 운영체제에 기능을 요청할 수 있는 인터페이스를 제공한다.

각각의 API 안에는 결국 시스템콜을 통해 운영체제 기능을 요청하게 된다.

이런 API를 종류별로 묶어놓은 library를 기반으로 해서 app, shell을 만든다.

이 프로그램을 통해 사용자가 사용하는 것.

 

프로그래밍 언어를 배운다는 것은 결국 library, API의 사용법을 익히는 것이다.

 

 

 

 

 

- 운영체제를 만든다면?

 

1. 운영체제를 개발한다. (kernal)

2. 시스템콜을 개발한다.

3. C API (library)를 개발한다. (c언어로 만드는 경우, 일반적인 케이스)

4. Shell 프로그램을 개발한다.

5. 응용프로그램을 개발한다.

 

 

 

* 시스템콜 정의 예시

POSIX API (유닉스 계열의 운영체제들이 주로 사용), 윈도우 API

맥도 유닉스계열과 유사

(API : 각 언어별 운영체제 기능 호출 인터페이스 함수)

(시스템콜: 운영체제 기능을 호출하는 함수)

docs.oracle.com/cd/E19048-01/chorus4/806-3328/6jcg1bm05/index.html

 

 

 

 

 

- CPU Protection Rings

 

인텔 cpu를 기준으로 4가지 모드를 가지는 경우

 

CPU도 '권한모드'를 가지고 있다.

•사용자 모드(user mode by applications) : 응용 프로그램이 사용, 일반적인 명령 실행

•커널 모드(kernel mode by OS) : OS가 사용, 특권 명령어 실행, 원하는 작업수행을 위한 자원 접근을 가능하게 하는 모드

 

위 그림에서 (Ring 0 - 커널모드 / Ring 3 - 사용자 모드) 이다.

 

 

* kernel 이란? OS kernel

(핵심)

 

* shell 이란?

(껍데기)

 

 

 

( 어떤 명령은 사용자 영역에서, 어떤 명령은 커널 영역에서 실행된다. )

 

 

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

 

커널 모드에서만 실행 가능한 기능들이 있음  

커널 모드로 실행하려면, 반드시 시스템 콜을 거쳐야 함

시스템 콜은 운영체제가 제공

 

-> 함부로 응용프로그램이 전체 컴퓨터 시스템을 해치지 못한다.

 

 

 

* 응용 프로그래머와 시스템 프로그래머

 

 

응용프로그래머 - API, framework를 가지고 응용프로그램을 개발

시스템프로그래머 - shell/API/system call 개발

 

 

 

 

* code example

 

 

코드의 해석보다는

모드가 전환되는 것을 확인하면 된다.

unistd.h라는 라이브러리에 있는 open()함수를 호출하고, 그로인해 커널모드로 전환되어 sys_open() 커널함수를 호출하게 된다.

 

 

 

 

 

 

 

 

정리

 

운영체제는 컴퓨터 하드웨어와 응용프로그램을 관리한다.

사용자 인터페이스를 제공하기 위해 shell 프로그램을 제공한다.

응용프로그램이 운영체제 기능을 요청하기 위해, 운영체제는 시스템 콜을 제공한다.

(보통 해당 시스템 콜을 직접 사용하기보다는 해당 시스템콜을 사용해서 만든 각 언어별 라이브러리(API)를 사용한다.)

 

 

운영체제는 시스템 콜 제공

프로그래밍 언어별로 운영체제 기능을 활용하기 위해 시스템콜을 기반으로 API 제공

응용프로그램은 운영체제 기능 필요시, 해당 API를 사용해서 프로그램을 작성

 

응용프로그램이 실행되서, 운영체제 기능이 필요한 API를 호출하면

시스템콜이 호출되서, 커널모드로 변경되어 OS 내부에서 해당 명령이 실행되고, 다시 응용프로그램으로 돌아가게 된다.

 

 

 

 

 

 

 

 

올인원 패키지 : 컴퓨터 공학 전공 필수👉https://bit.ly/3i4sCVE