Operating System Structure
Operating System Structures
이 챕터에서는 운영 체제의 기능을
운영 체제가 사용자에게 제공하는 서비스라는 측면에서 설명한다.
Operating System Services
운영 체제는 프로그램과 사용자들에게
프로그램의 실행과 각종 서비스를 제공한다.
운영 체제가 제공하는 사용자에게 유용한 기능들에는
- 사용자 인터페이스 (UI)
- 프로그램 실행
- 입출력 수행
- 파일-시스템 조작
- 통신
- 오류 감지
- 자원 할당
- 기록 (Accounting)
- 보호와 보안
등이 있다.
사용자 인터페이스
거의 모든 운영 체제가 이를 가지고 있다.
이들에는 명령어를 사용하는 Command-Line Interface (CLI),
그래픽을 사용하는 Graphics User Interface (GUI), Batch 등이 있다.
프로그램 실행
운영 체제는 디스크에 저장된 프로그램을
메인 메모리에 올려 적재하고, 프로그램의 실행이 시작되도록 도와준다.
또 정상적으로, 혹은 비정상적으로 작동하는지를 관리하고 오류를 표시한다.
입출력 수행
실행 중인 프로그램은 입출력을 요구한다.
이는 파일일 수도 있고 입출력 장치일 수도 있다.
운영 체제 중에 입출력을 하지 않는 것은 없다.
현대의 운영 체제는 응용 프로그램이 입출력을 직접 하게 냅두지 않는다.
입출력은 응용 프로그램이 요구하고, 운영 체제가 대행한다.
이를 사용자 프로그램에서 본다면,
이는 복잡한 입출력 수행에서 벗어날 수 있다.
시스템의 관점에선 개별 사용자(혹은 프로그램)가 직접 입출력을 하는 과정에서
흔히 발생할 수 있는 오류를 미리 방지할 수 있다.
파일-시스템 조작
운영 체제는 자신의 데이터를 장기 보존하기 위하여 파일을 사용한다.
운영 체제는 응용 프로그램이 파일과 디렉토리를 읽고 쓸 수 있도록 해준다.
파일의 정보들을 찾아볼 수도 있고 권한을 관리할 수 있다.
통신
운영 체제는 프로세스 간의 통신 기능을 제공한다.
프로세스 간의 통신이란 2개의 프로세스가 서로 정보를 주고 받는 것을 의미한다.
이때 이 프로세스는 같은 컴퓨터 내에 있을 수도 있고,
네트워크로 연결된 원격 컴퓨터에 있을 수도 있다.
통신은 공유 메모리나 메시지 전달로 이루어진다.
같은 컴퓨터 내에서의 프로세스 간 통신은
inter-process communication,
원격 컴퓨터에서의 통신은 networking 이라고 한다.
여기서 주로 다루는 통신은 inter-process communication (IPC)이다.
오류 감지
운영 체제는 일어날 수 있는 다양한 종류의 오류들을
끊임없이 감시하고 있어야 한다.
오류는 CPU나 메모리 같은 하드웨어, 입출력 장치,
혹은 프로그램의 논리적 오류일 수도 있다.
운영 체제는 컴퓨팅이 계속되는 것을 확실히 하기 위해
각 유형의 오류마다 운영 체제는 적절한 조치를 취해야 한다.
오류의 원인을 파악하는 디버깅은
사용자와 프로그래머가 시스템을 효율적이고 안전하게 사용하도록 한다.
여기서부터는 사용자의 편의를 위한 서비스가 아닌
시스템 전체의 효율적인 사용을 위해 제공하는 기능들이다.
자원 할당
자원이란 CPU, 메인 메모리, 입출력 장치 같은 하드웨어 자원을 말한다.
자원은 프로세스가 사용하며, 프로그램 실행에 필요한 모든 것을 자원이라고 한다.
이들은 운영 체제가 관리한다.
다수의 사용자나 일이 동시에 진행될 때 자원은 그들 각각에게 할당되어야 한다.
자원의 종류에는 여러가지가 있다.
CPU 사이클, 메인 메모리, 파일 저장 공간 등의 것들은 특수한 할당 코드를 사용한다.
입출력 장치 등은 요청과 해제에 해당하는 코드를 생성한다.
요청 시 사용자 혹은 프로그램에 그 기능을 제공하고, 종료 시 회수하는 것이다.
운영 체제마다 자원 할당에 다양한 할당 정책이 사용되지만
이들은 효율성, 공정성을 기준으로 한다는 공통점이 있다.
기록
운영 체제는 어떤 사용자가 어떤 종류의 컴퓨터 자원을 얼마나 많이 사용했는지를 추적한다.
이는 위의 자원 할당 기능에 사용될 수도 있고,
AWS 같이 과금에 사용될 수도 있다.
보호와 보안
사용자들은 자신의 정보가 보호받기를 원하고,
다른 프로세스의 동작이 방해돼선 안 된다.
다중사용자나 네트워크 컴퓨터 시스템에 저장된 정보의 소유자들은
이 정보들을 제어하기를 원하고, 동시에 실행되는 프로세스들이 서로를 방해해서는 안 된다.
보호는 시스템 자원으로 가는 모든 접근이 확실하게 통제되는 것이다.
이 일환으로 각 사용자가 자신의 자원에 대한 접근을 제어할 수 있는 수단을 제공한다.
외부자로부터의 시스템 보안은 사용자 인증을 요구하여
유효하지 않은 접근이 시도되는 외부의 입출력 장치,
외부로부터의 불법적인 접근으로부터 보호하기도 한다.
운영 체제 서비스 요약
위 그림은 운영 체제가 제공하는 서비스들을 그림으로 나타낸 것이다.
맨 위에는 사용자와 시스템 프로그램들이 있다.
그 아래에는 사용자 인터페이스들이 있어
시스템을 쉽게 사용할 수 있게 해준다. 특히, CLI와 GUI는 특수 목적의 사용자 프로그램이다.
그 밑의 시스템 콜은 응용 프로그램이 운영 체제를 호출하는데 사용되는 인터페이스이다.
그 밑은 하드웨어 바로 위에서 동작하는 것들이며,
프로그램의 실행, 입출력등의 운영 체제 서비스를 제공한다.
이들은 컴퓨터가 켜질 때부터 꺼질 때까지 동작하는 커널이라고도 한다.
그 밑에 운영 체제가 관리하는 하드웨어 자원들이 있다.
사용자 운영 체제 인터페이스 - CLI
CLI 는 화면과 키보드에 기반하는 인터페이스이다.
사용자가 키보드로 명령을 입력함으로서 프로그램을 실행할 수 있다.
명령을 받아 프로그램을 실행해주는 프로그램을 명령 해석기라고 한다.
CLI, 혹은 명령 해석기는 명령어(커맨드)에 직접적인 접근할 수 있도록 해준다.
명령은 보통 한 줄 씩 치는데, 이를 command line 이라고 한다.
CLI는 커널에서 구현될 수도 있고, 시스템 프로그램,
혹은 별도의 응용 프로그램으로 구현될 수도 있다.
CLI는 사용자의 취향에 따라 한 시스템에서도 여러 종류가 있을 수도 있으며
이를 shell들이라고 한다.
이들의 ‘명령->처리’ 기본 기능은 동일하나,
shell 마다 각기 다른 부가 기능이 있다.
사용자의 취향에 따라 적절한 shell을 선택해 쓸 수 있다.
CLI는 명령을 사용자로부터 fetch 하고 실행하는데
이 명령은 운영 체제가 처음부터 제공하는 built-in 명령일 수도 있고
프로그램의 이름일 수도 있다.
후자의 경우에서 프로그래머가 새 이름을 갖는 프로그램을 생성해서
기존 shell 수정 없이도 새로운 명령을 만들어 낼 수 있다.
자주 쓰는 명령어들 집합들을 묶어서
마치 하나의 프로그램처럼 가지고 다닐 수도 있는데
이를 shell script 라고 한다.
위 사진은 Bourne Shell 명령 해석기의 일부 사진으로
명령을 입력하면 그 실행 결과를 화면을 통해 나타내준다.
User Operating System Interface - GUI
GUI는 사용자 친화적인 데스크톱 인터페이스이다.
대개 마우스, 키보드, 모니터로 구현된다.
아이콘은 파일들, 프로그램, 행동, 기타 등등을 나타낸다.
인터페이스의 객체에서마다 마우스의 버튼이 달라지고
이로 인해 다른 행동들(정보 제공, 설정, 기능 실행, 폴더 열기)을 한다.
GUI는 1970년 Xerox 사의 PARC 연구팀에서 제안됐으며
1980년 Apple 의 매킨토시에서 성공을 이루었다.
모바일 기기에서는 마우스를 쓰기 어려우므로 터치 스크린으로 동작한다.
키보드는 이전엔 물리 키보드였는데, 요즘은 거의 소프트웨어로 동작한다.
많은 시스템들이 CLI와 GUI 들을 모두 사용한다.
윈도우즈는 GUI를 사용하는데 CLI 쉘도 제공한다.
애플의 맥OS는 “아쿠아”라고 하는 GUI가 있고
그 밑에선 유닉스 커널과 shell을 이용할 수 있다.
유닉스와 리눅스는 CLI를 가지고 있고 GUI를 선택적으로 사용 가능하다.
UI는 실질적인 시스템 구조에는 포함되지 않는다.
유용하고 친근한 인터페이스를 설계하는 것이 운영 체제의 직접적인 기능은 아니다.
운영 체제는 사용자 프로그램의 적절한 서비스를 제공하는데 초점을 맞출 뿐
사용자 프로그램과 시스템 프로그램을 구별하지는 않는다.