운영체제는 다음과 같은 기능들로 구성되어 있습니다.
1. 프로세스 관리
-> 프로그램을 실행하는 데 관련된 기능(프로세스 생성, 프로세스 실행, 실행 제어 등)
2. 메인 메모리 관리
-> 메모리 공간을 프로그램에게 할당하고 회수하는 기능
3. 파일 관리
-> 파일을 보조 기억 장치에 저장하고, 보조 기억 장치에 저장된 파일 시스템을 운영하는 기능
4. 입/출력 시스템 관리
-> 컴퓨터 시스템이 입/출력을 할 때 제어하는 기능
5. 보조 기억 장치 관리
-> 하드디스크와 같은 보조 기억 장치의 공간을 할당하고 회수하는 기능
6. 보안 관리
-> 컴퓨터 내에서 여러 사용자가 함께 사용할 경우, 각 사용자들의 정보를 보호하는 기능
7. 네트워킹(Networking)
-> 다른 컴퓨터(서버 등)와의 통신에 관련된 기능
8. Command-Interpreter System
-> 사용자가 컴퓨터에게 명령한 내용을 해석하고, 실행하는 기능
1-5번 기능에 대해서는 나중에 자세하게 알아볼 것이고, 이번 글에서는 네트워킹과 Command-Interpreter System에 대해서 알아보도록 하겠습니다.
Distributed-System(분산 시스템)
네트워킹 기능은 분산 시스템에서 사용되기 때문에 분산 시스템에 대해서만 간단하게 알아보도록 하겠습니다.
분산 시스템이란?
각각 하드웨어와 운영체제를 가진 여러 대의 컴퓨터가 네트워크로 연결되어 하나의 시스템처럼 동작하는 것을 말합니다.
분산 시스템에 탑재된 분산 처리 소프트웨어는 여러 대의 컴퓨터들이 하나의 목적으로 하나의 응용 프로그램을 실행할 수 있도록 제어하고 관리합니다.
또, 분산 처리 소프트웨어는 컴퓨터들의 제조사나 운영체제가 다르더라도 호환되도록 중재를 하는 역할을 합니다.
따라서 하나의 서비스를 처리할 때 여러 대의 컴퓨터에서 일을 분담해서 보다 빠르게 처리할 수 있게 되는 것이죠.
분산 시스템을 사용하면 한 대가 고장이 나더라도 다른 컴퓨터에서 이어서 서비스를 제공할 수 있기 때문에 서비스의 연속성이나 신뢰성이 좋아진다는 장점이 있습니다.
또, 다른 컴퓨터와 데이터를 다중화하고 복제하여 저장해 놓는다면, 한 컴퓨터에 저장된 데이터에 접근하지 못하게 되더라도 다른 컴퓨터에서 같은 데이터를 사용할 수 있기 때문에 가용성이 높아진다는 장점도 있습니다.
이러한 분산 시스템의 예로는 ATM이 있습니다.
우리가 ATM을 이용해서 은행 업무를 볼 수 있는 것은 분산 시스템이 적용되었기 때문입니다.
ATM(클라이언트 컴퓨터)이 은행에 있는 서버 컴퓨터와 분산 시스템을 구성해 두 컴퓨터에서 은행 업무 라는 서비스를 나눠서 처리할 수 있게 되는 것이죠.
즉, ATM과 서버 컴퓨터가 은행 업무를 분담해서 처리하는 것입니다.
✅ 정리
분산 시스템의 장점
-> 서비스 처리 속도를 높일 수 있다
-> 서비스의 연속성과 신뢰성이 높아진다
-> 데이터의 가용성이 높아짐 (데이터 다중화, 복제 등)
다음으로 Command-Interpreter System에 대해 알아보겠습니다.
Command-Interpreter System
Command-Interpreter System이란?
사용자의 명령을 해석하고, 그 명령을 수행하는 데 필요한 운영체제 내부의 함수를 실행하는 운영체제의 기능
CLI, GUI
Command-Interpreter System은 CLI, GUI 두 가지 형태로 구현되어 있습니다.
CLI는 Command-Line-Interface로, 위 그림처럼 명령어 창에 문자 형식으로 명령어를 입력하는 방법을 말합니다.
명령을 입력할 수 있는 창을 Command-Line-Prompt(Shell-Prompt)라고 하고, 프롬프트에 약속된 Command(명령어)를 입력하면 이 Command를 해석해 해당하는 기능을 수행하는 것입니다.
GUI는 Graphical-User-Interface로, 위 그림처럼 모니터 화면에 보이는 그래픽 기반의 사용자 인터페이스를 말합니다.
사용자가 마우스, 키보드를 이용하거나 터치를 통해 그래픽 요소들을 조작하면 이 입력을 받아 처리하고, 결과를 출력하는 방식으로 동작합니다.
CLI 또는 GUI 중 어떤 방법을 사용하던지 사용자가 명령을 하면 바로 Command-Interpreter System가 시스템에 등록되어있는 명령어인지 즉, 운영 체제가 실행할 수 있는 명령어인지 확인합니다.
실행할 수 없는 명령어를 입력했다면 사용자에게 명령어가 잘못되었다고 알려주고,
실행할 수 있는 명령어라면 실제 그 명령을 수행하는 운영 체제 내부 함수에게 전달을 해 명령을 실행하도록 합니다.
예를 들어 현재 컴퓨터에서 실행되는 어떤 프로세스의 목록을 보여달라는 명령이면 운영체제 내부의 프로세스 관리 기능에게 전달을 하고, 어떤 파일을 복사하라는 명령이면 실제로 파일을 복사하기 위해 운영체제 내부의 파일 관리 기능에게 전달을 합니다.
System-Call
System-Call 이란?
지금까지 살펴본 것처럼 사람은 CLI, GUI 등 다양한 방식으로 운영체제에게 명령을 내릴 수 있습니다.
프로그램도 마찬가지로 운영체제에게 명령을 내려 서비스를 요청할 수 있는데요.
프로그램은 사람과 같은 방식으로 명령을 내리지 못합니다.
그래서 프로그램이 운영체제에게 명령을 내릴 수 있도록 만들어진 것이 바로 System-Call(시스템 콜) 입니다.
System-Call은 함수들의 집합으로 미리 어떤 기능을 수행하도록 정해놓고,
특정 함수가 호출되면 미리 정의된 기능을 수행하게 되는 것이죠.
위의 계층구조 그림에서 운영체제 위에 Application Programs와 Utilities Programs가 있죠.
이전 글에서도 말했듯이 운영체제 위의 것들은 모두 응용프로그램입니다.
이 프로그램들이 아래에 있는 운영체제에게 어떤 서비스를 요청을 하려면 System-Call(보라색으로 표시된 부분)의 함수 중 하나를 호출해야 한다는 것입니다.
프로그램이 System-Call에서 함수를 호출(Funtion-Call)하면 해당 함수가 운영체제의 서비스를 실행하게 됩니다.
따라서 Function-Call이 프로그램과 운영체제 사이의 인터페이스라고 할 수 있습니다.
그런데 여기서 중요한 점이 있습니다.
그림에서 보면 노란색으로 표시된 Command-Interpreter가 System-Call의 위에 위치하는 것을 볼 수 있습니다.
사람(Programmer 또는 End User)이 Command-Interpreter에게 명령을 하고, Command-Interpreter는 다시 System-Call을 부르는 것이죠.
⭐ Command-Interpreter-System도 운영체제에게 명령을 전달하기 위해서는 System-Call을 호출해야 한다는 것입니다.
그러니까 사람은 운영체제에게 Command-Interpreter-System을 이용해서 명령을 전달한다고 생각하지만,
사실 내부적으로는 System-Call을 통해서 운영체제에게 명령을 전달한다는 것이죠.
프로그램은 운영체제에게 명령을 전달하는 방법이 System-Call밖에 없었으니
운영체제에게 명령을 전달하는 방법은 결국 System-Call 한 가지밖에 없는 것입니다.
✅ 정리
운영체제에게 명령을 전달하는 방법
- User or Programmer -> Command-Interpreter-System(CLI, GUI) -> System-Call -> OS
- Program -> System-Call -> OS
=> System-Call이 운영체제에게 명령을 전달하기 위한 유일한 방법
'운영체제' 카테고리의 다른 글
[운영체제] 프로세스의 정의와 프로세스의 상태 (0) | 2023.04.05 |
---|---|
[운영체제] OS-Architecture(Monolithic Kernel, Micro Kernel) (0) | 2023.04.04 |
[운영체제] Timesharing (0) | 2023.04.02 |
[운영체제] Multi Programming vs Multi Processing (0) | 2023.04.02 |
[운영체제] SMP(Symmetric Multi Processing) (0) | 2023.04.02 |