CS & SW & IT 용어
[OS, Kernel, Shell]
Haksae
2021. 12. 22. 15:39
1. 운영 체제(OS)의 구성
운영 체제 or 오퍼레이팅 시스템 (Operation System, 약칭 : OS)
OS는 시스템 하드웨어를 관리할 뿐 아니라 응용 소프트웨어를 실행하기 위하여 하드웨어 추상화 플랫폼과 공동 시스템 서비스를 제공하는 시스템 스프트웨어다. 또한 입출력과 메모리 할당과 같은 하드웨어 기능의 경우 운영 체제는 응용 프로그램과 컴퓨터 하드웨어 사이의 중재 역할을 한다.
- 일반적으로 우리는 파워포인트나 워드를 쓸 때 프로그램이 cpu와 memory와 어떻게 소통하는지 등에 대해서 따로 신경쓰지 않는다. 이는 다 운영체제 덕분이다.
💡 Os를 거대한 프로그램으로 실행할 경우 심각한 비효율성을 초래할 수 있다. 이러한 이유로 Os는 케널(Kernel), 쉘(Shell), Utility 등 여러가지 프로그램으로 나뉘어져 있다.
- 참고할만한 그림
2. 커널 (Kernel)
💡 커널은 본질적으로 프로그램이다. 그러나 모든 프로그램과 다르게 커널만이 가지는 특별한 점이 있다. 그것이 바로 'Memory Resident'라는 점이다. 즉 커널은 메모리에 항상 상주해있다. (이점에서 운영체제이다)
👉🏻 커널이 아닌 다른 프로그램(Utility)들은 메모리에 있어도 되고 없어도 된다.(디스크에 상주한다) 이를 'Disk Resident'라고 표현한다. 필요할 때 마다 메모리에 로딩해서 사용해도 된다는 의미이다. (이런 의미에서 Utility와 Command는 같다)
커널은 일반적으로 보지 못하는 낮은 수준의 프로세스를 제어한다. 얼마나 메모리를 읽고 쓸 것인지, 어느 프로세스를 실행할 것인지, 모니터, 키보드, 마우스와 같은 장치를 통해 어떻나 정보를 주고받을 것인지, 네트워크를 통해 받은 정보를 어떻게 해석할 것인지를 제어한다.
- 간단히 요약하면, 소프트웨어와 하드웨어 간의 커뮤니케이션을 관리하는 프로그램이다.
- 운영체제에서 가장 중요한 구성요소로서, 입출력을 관리하고 소프트웨어로부터 요청을 컴퓨터에 있는 하드웨어(Cpu,메모리,저장장치 등)가 처리할 수 있도록 요청을 변환하는 역할을 한다.
- Memory Resident : 하드웨어를 관리하고 필요한 프로세스를 나눠주는 등 여러 시스템 자원을 제어하고, 컴퓨터 부팅 시 부트로더에 의해 로드되어 항상 메모리에 상주한다
- 프로세스 실행 및 제어
- 메모리 관리
- 외부장치를 제어
- 네트워킹을 통해 받은 정보의 해석 제어
1) 프로세스 실행 및 제어 & 메모리
- 프로세스가 생성되면 PCB와 함께 코드와 데이터 등의 부분들을 위해 메모리를 할당한다.
- 한정된 시스템 자원을 효율적으로 관리하기 위해 "스케쥴링"을 하고 가상 메모리를 이용하여 프로세스를 페이지 단위로 쪼개고 물리 공간에 매핑한다.
2) 보안
- 커널은 컴퓨터 하드웨어와 프로세스의 보안을 책임진다. 왜냐하면 프로세스는 실직적으로 메모리와 연결해서 실행시키는 것 도한 커널의 제어 권한 영역이기 때문이다.
- PCB에 적혀 있는 프로세스의 상세 권한 및 통신 방법을 보고 이를 위반하는 접근이나 제어 명령을 요청할 경우 반려하는 등의 일을 한다.
- 컴퓨터 하드웨어 또한 이와 비슷하다. 운영체제를 구성하기 위한 컴퓨터 내 파일들이나 low-level로 작성된 여러 내장 함수들에 접근하거나 해당 코드를 수정하여 하드웨어의 깊은 부분을 건드리는 코드에 접근할 때, 커널은 이를 차단하고 관리한다.
*이 부분에서 문제가 생긴다면, 커널의 손이 닿지 않는 곳을 교묘히 공격하여 시스템을 고의로 망가뜨리는 형식의 악성코드를 생각해볼 수 있다.
3) 추상화
- 사양의 권고치를 넘겨 오버쿨럭시키는 것을 생각해보면, 사용자가 하드웨어에 직접 접근하는 것은 위험한 것이다.
- 일반적으로 커널은 운영체제의 복잡한 내부를 감추고 깔끔하고 일관성 있는 인터페이스를 하드웨어에 제공하기 위해 몇 가지 하드웨어 추상화(같은 종류의 장비에 대한 공통 명령어의 집합)들로 구성되어 있다.
- 덕분에 프로그래머가 여러 장비에서 작동하는 프로그램을 개발하는 것을 돕는다. 이를 제조사의 장비 규격에 대한 특정한 명령어를 제공하는 소프트웨어 드라이버에 의지한다고 한다.
*그렇기 때문에 드라이버 오류와 같은 것들은 커널이 제어할 수 없는 수준의 메소드들이 들어가있어 직접적으로 커널이 이를 이용하여 하드웨어 관리하려 할 때 규격에 맞지 않아 오류가 생기곤 한다.
3. 쉘(Shell)
쉘(Shell)은 OS의 다양한 기능과 서비스를 구현하는 인터페이스를 제공하는 프로그램이다. 쉘은 쉽게 말하면 사용자와 커널의 상호작용 사이에 낀 통역자, 즉 명령어 해석기이다.
💡 쉘은 많은 프로그램들의 메모리 교통 정리를 해주는 역할을 한다. 유틸리티 중 하나로 쉘의 1차적인 임무는 'Job control'이다.
- 쉘은 사용자와 커널 사이를 감싸기 때문에 껍데기를 뜻하는 "쉘" 이라고 이름 붙여졌다.
- 쉘은 일반적으로 CLI(Command Line Interface) 혹은 GUI(Graphic User Interface)로 분류된다.
- 쉘 스크립트, bash 같은 것들이 여기 해당된다.
4. 프로세스
- 사용자(명령) → 쉘(해석) → 커널(명령 수행 후 결과 전송) → 쉘(해석) → 사용자(결과 확인)