| 요약
- 운영체제는 커널 + 기타 기능
- 운영체제는 시스템 콜을 제공 (쉘은 사용자와 OS간 인터페이스)
- 프로그램 언어별로 OS별 API를 제공
- 응용 프로그램에서 API로 시스템 콜 호출 시, 커널 모드로 변환, OS내부에서 명령 처리 후 리턴
| 운영체제란?
운영체제 (OS : Operating System) :
사용자의 편의를 위한 환경을 제공하는 시스템 소프트웨어
- 종류 : 윈도우, 유닉스 계열(리눅스), MacOS
- 운영체제는 일반적으로는 커널에 여러가지가 추가된 상태를 의미하지만, 좁은 의미로 "커널(kernel)" 자체를 말합니다.
pf. General Purpose OS vs Embeded OS
General Purpose OS | Embeded OS |
컴퓨터에서 사용되는 OS * 프로세스 실행시간에 민감하지 않고, 일반적인 목적으로 사용된다. |
컴퓨터가 아닌, 다른 기종에서 특정한 작업을 실행하기 위해 만들어진 특수 목적의 OS * 모바일, 비행기, TV, IOT 전자제품 등 |
안드로이드는 Embeded OS
아래 안드로이드 구조를 보면 안드로이드에는 리눅스 커널만 들어가고
일반적인 PC의 OS의 나머지 기능들은 추가되어 있지 않습니다. (정말 모바일을 위해 만들어진 녀석이에요)
안드로이드는 리눅스 커널 위에 라이브러리와 프레임워크를 제공해서 안드로이드 앱이 작동하게 합니다.
| 커널과 쉘
커널(코어, 핵심):
: 컴퓨터 운영 체제의 핵심이 되는 컴퓨터 프로그램 [출처 : 위키백과]
쉘(Shell)
: 사용자가 운영체제 기능과 서비스를 조작할 수 있도록 시스템 콜을 하는 프로그램
: 사용자와 운영체제 사이에 일종의 다리 역할을 한다.
*시스템 콜의 user(shell) <-> provider(kernel)
- 쉘은 커널 위에서 동작하는 응용 프로그램 중 하나입니다.
- 사용자가 어떤 "명령"을 하면, 프로그램을 구동시킬 수 있는데, 그런 명령을 운영체제에 전달하는 역할을 하는 게 쉘이에요.
- 쉘 중에서도 유명한 쉘로 "리눅스 bash"가 있는데, 해당 내용은 이후 공부하면서 정리하려고 해요.
터미널(CLI) | |
그래픽 사용자 인터페이스(GUI) | 사용자가 편리하게 사용할 수 있도록 입출력 등의 기능을 알기 쉬운 아이콘 따위의 그래픽으로 나타낸 것 [출처 : 위키피디아] |
| 시스템 콜
- 시스템 콜은 운영체제에게 어떤 기능을 사용하라고 요청하는 명령 또는 함수를 말하는데요.
- 시스템 콜이라고도 하고, 시스템 콜 인터페이스라고도 합니다.
- 쉽게 풀어서, 운영 체제를 깨워서, "이 작업을 해줘!" 라고 하는 명령을 말합니다.
- 시스템 콜은 커널이 제공하고 있고, 쉘은 시스템 콜을 사용해서 커널이 제공하는 서비스(기능)에 접근합니다.
시스템 콜 :
운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라
커널에 접근하기 위한 인터페이스 [출처 : 위키백과]
| API
- 프로그램 언어별로 운영체제에 맞는 API가 있습니다.
: OS는 주로 C언어로 구성되어 있다고 합니다.
그런데 생각해보면, 응용프로그램들은 자바, 자바스크립트, 기타 C언어가 아닌 언어들로 작성이 된 경우가 많아요.
그럼 어떻게 응용프로그램들은 다른 언어로 구성된 OS의 시스템콜을 호출할까요?
그건 프로그램 언어별로 제공되는 API가 있기 때문입니다.
API(Application Programming Interface)
: 필요할 때 운영체제의 시스템 콜을 호출하는 형태로 만들어진 인터페이스이다.
: 쉽게 말해,함수,패키지,라이브러리이다.
ex.
Java는 각 OS별로 서로다른 JDK를 통해 개발을 한다.
-> Java의 api 곧, 라이브러리 중 하나로 IO가 있는데, IO는 OS에 입출력을 위한 시스템콜을 호출한다
Q1. 왜 응용프로그램마다 운영체제별로 다른 프로그램을 제공할까요?
- 각각의 운영체제마다 시스템콜은 다릅니다. 그렇기에 각 운영체제에 맞는 API도 다를 수 밖에 없어요.
Q2. 자바 언어로 작성하면 왜 운영체제별로 다른 프로그램을 만들지 않아도 될까요?
- 자바에는 JRE라는 일종의 대안적 운영체제가 존재합니다.
- JRE는 가상머신(JVM)을 통해 데이터를 처리하고 저장합니다.
- 이러한 JRE는 운영체제 위에 덧씌워져 있는 것과 같이 동작하기 때문에,
결국 자바로 작성한 프로그램은 하나의 소스코드로 여러 개의 운영체제에서 실행할 수 있는 것입니다.
| 커널 모드와 사용자 모드
사용자 모드 | 응용 프로그램이 사용 |
커널 모드 | OS가 사용 |
- 예를 들어, 카카X맵을 처음 설치해서 실행한다고 예를 들어볼게요.
카카오X맵은 나의 실시간 위치를 확인하기 위해 [실시간 위치 정보 제공]에 대한 [권한]을 요청합니다.
이러한 권한 요청을 하는 이유는 뭘까요? 그 이유가 바로 위의 사용자 모드와 연관이 되어 있습니다.
- 카카X맵(응용프로그램)을 키고 쓸 때 운영체제의 도움이 필요 없었다면 이 때는 사용자 모드인 상태입니다.
그러나, 실시간 위치 정보는 운영체제(여기서는 모바일이라서 안드로이드이지만 무시할게요)에서 관리하는 정보입니다.
따라서, 카카X맵이 실시간 위치 정보를 얻으려면 운영 체제에게 시스템 콜을 해야 하죠.
- 이제, 시스템 콜이 이루어지고 운영체제가 작동하면 커널 모드가 시작됩니다.
사용자의 눈으로 볼 때, 권한 요청이 수락되고 비로소 카카X맵에서 길찾기가 정상 작동됩니다.
- 이렇듯, 응용 프로그램이 직접적으로 내장 기기의 파일이나 중요 기능을 건드리지 않도록
사용자 모드와 커널 모드를 분리하는 것은 매우 중요합니다.
** 더보기 : CPU protection rigns에 대한 자세한 설명 링크
| 운영체제의 역할
1. 시스템 자원 (하드웨어) 관리
2. 사용자와 컴퓨터 간 커뮤니케이션을 지원합니다.
3. 응용 프로그램을 제어합니다. (프로세스 관리, 파일 관리, 입출력관리, 네트워크 보안 등)
pf. 프로그램 = 소프트웨어, 소프트웨어 > 운영체제 + 응용 프로그램 응용 프로그램 > Application(PC), App(스마트폰용) |
[ 추천된 책 ]
Operating System Concepts
[ 출처 및 참조 ]
부트캠프 수업을 들은 후 여러 자료를 참조하여 정리한 내용입니다.
https://www.techtarget.com/iotagenda/definition/embedded-operating-system
https://medium.com/@su_bak/os-%EC%BB%A4%EB%84%90-kernel-%EC%9D%B4%EB%9E%80-b6b8aae8d0b4
https://coding-factory.tistory.com/300
'Computer Science > OS' 카테고리의 다른 글
[운영체제] 스레드 - 동기화, 뮤텍스/세마포어, 데드락/스타베이션 (0) | 2022.07.23 |
---|---|
[운영체제] 프로세스와 스케줄러 (0) | 2022.07.23 |
[컴퓨터 구조] 컴퓨터 구조 (0) | 2022.07.11 |
[ 네이밍 규칙 ] 웹 개발자가 알아야할 네이밍규칙 스크랩 (0) | 2022.05.18 |
[네트워크] 멀리있는 컴퓨터끼리는 이렇게 데이터를 주고받는다. - (3계층) IPv4, ICMP, 라우팅 테이블 및 전송, 조각화 (0) | 2022.05.15 |