Shell
: 사용자와 운영체제간의 인터페이스로 사용자가 커널에 명령을 내리는 용도로 사용된다. Windows에서는 CMD(Command Prompt)와 PowerShell이 주로 사용된다.
System Call
응용프로그램과 커널 간의 인터페이스로 응용 프로그램이 운영체제의 서비스를 호출하기 위해 사용하는 인터페이스이다.
프로그램이 시스템 콜을 호출하면 제어가 커널로 넘어와서 커널모드가 실행된다. 커널은 내부에 기능별로 고유한 번호를 할당하고 있고, 커널은 그 번호에 맞는 서비스 루틴을 호출한다. 서비스 루틴을 모두 처리하고 나면 커널모드에서 사용자 모드로 다시 전환된다.
(시스템 콜 호출 - 커널모드 - 고유번호 호출 - 사용자모드)
운영체제가 직접 하드웨어 자원을 제어하면, 여러 프로그램이 동시에 하드웨어 자원을 사용하려고 할 때 충돌이 발생할 수 있기 때문에, 운영체제는 시스템콜을 통해 운영체제의 권한과 보안 정책을 따라 프로그램들이 운영체제의 서비스를 사용하도록 한다.
시스템 콜에는 프로그래밍 언어별로 구현된 시스템 콜 API
가 있는데, API 내부에는 필요시 해당 운영체제의 시스템콜을 호출하는 API가 있다
따라서 응용 프로그램을 실행하면 다음 과정을 거쳐 실행된다
응용프로그램 실행 -> 해당 api 호출 -> 시스템 콜 호출 -> 커널모드로 변경 후 OS내부에서 명령 실행 -> 프로그램 실행
CPU Protection Rings
운영체제에서 시스템 자원에 대한 접근을 제한하는 보안 메커니즘이다.
Ring 0부터 3까지 있고 숫자가 낮을수록 더 강한 권한을 가진다
Ring 0는 커널모드로 운영체제의 모든 기능에 접근할 수 있다. 커널모드를 실행하려면 반드시 시스템 콜을 거쳐야한다.
어떤 모드를 사용할 지 비트에 담아서 보내면 cpu가 실행 커널 또는 사용자 모드를 실행한다.
컴파일러의 코드를 차례대로 읽으면서 필요에 따라 자동으로 사용자모드과 커널모드로 전환되면서 읽는다
운영체제와 프로그램과의 관계
OS가 Application과 관계가 전혀 없는 것은 아니다
커널
: 운영체제의 핵심으로 하드웨어 자원을 관리하고 운영체제의 기능을 수행하는 소프트웨어이다.
(각 프로그램이 사용할 cpu양, 메모리 용량 할당, 저장매체의 어디에 어떻게 저장할지, 키보드/마우스의 움직임 전달여부까지 모두 결정한다.
하드웨어 관리 및 추상화 : 디바이스 드라이버만 하드웨어에 관여를 하고 사용자는 파일 저장매체의 종류를 고려하지 않고 동일한 방식으로 사용이 가능하다. 즉 하드웨어에 종속적인 작업을 할 필요가 없다.
프로세스와 스레드 관리)