운영체제란 하드웨어를 제어하고 다양한 하드웨어, 소프트웨어 리소스들을 효율적으로 관리한다.
즉 사용자는 운영체제를 통해 시스템을 편리하게 이용할 수 있다.
사용자가 실행 시킨 응용 프로그램은 운영 체제를 통해 하드웨어에 간접적으로 접근할 수 있다.
많이 사용하는 운영체제의 종류에는 Windows, MacOS, ubuntu 등이 있다.
운영체제는 정말 다양한 역할을 하지만 사용자 인터페이스를 통해 사용자와 상호작용 하는 방식과 하드웨어와 상호작용 하는 방식을 알아보자.
사용자 인터페이스
인터페이스란 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다.
즉 사용자 인터페이스란 사용자와 컴퓨터를 연결해주는 역할을 한다고 볼 수 있다.
그렇다면 사용자가 운영체제에 접근하기 위해서는 사용자와 운영체제를 이어주는 인터페이스가 필요하다.
인터페이스 중 CLI와 GUI에 대해서 알아보자.
CLI (Command Line Interface)
CLI는 명령줄 인터페이스로 Windows 운영체제 기준으로 cmd나 PowerShell 등이 있다.
CLI를 사용하면 직접 명령어를 입력할 수 있고 GUI에 비해서 원하는 작업을 빠르게 진행할 수 있다.
예를 들어 GUI에서 특정 파일을 지우기 위해 파일을 클릭하고 드래그해서 휴지통에 넣었다면 CLI에서는 rm 명령어(Linux 기준)를 통해 빠르게 파일을 지울 수 있다.
GUI (Graphical User Interface)
CLI는 단순 명령어로 작업을 할 수 있다면 GUI는 사용자가 편하게 사용할 수 있도록 기능을 알기 쉬운 아이콘과 같은 그래픽으로 나타낸 것이다.
아래는 ubuntu 운영체제의 GUI 모습이다.
명령어를 일일이 입력하는 대신 직접 아이콘을 클릭하는 방식으로 작업을 진행할 수 있다.
커널(kernel)
운영체제가 응용 프로그램에게 제공해주는 서비스는 굉장히 다양하지만 리소스를 제어하는 핵심적인 기능을 담당하는 부분을 커널(kernel)이라고 한다.
참고로 위에서 설명한 사용자 인터페이스(CLI, GUI)는 커널에 속한 기능이 아니다.
응용 프로그램 인터페이스
CLI나 GUI를 통해 사용자와 운영체제가 상호작용 하는 방식을 알아보았다.
이번에는 응용 프로그램이 하드웨어 리소스를 필요로 할 때 어떻게 운영체제와 상호작용 하는지 알아보자.
운영체제는 응용 프로그램을 위해 시스템 콜(system call)이라는 인터페이스를 제공한다.
일반적으로 하드웨어는 운영체제가 직접적으로 관리하고 응용 프로그램은 운영체제가 제공해주는 시스템 콜이라는 인터페이스를 사용해야 하드웨어 리소스를 사용할 수 있다.
만약 응용 프로그램이 운영체제를 거치지 않고 하드웨어를 직접적으로 제어할 수 있다면 다양한 응용 프로그램이 실행될 때 하드웨어 관리가 제대로 이루어지지 않을 것이다.
그래서 운영체제가 대신 하드웨어를 제어하고 응용 프로그램은 운영 체제가 제공해 준 시스템 콜을 통해 하드웨어를 간접적으로 제어할 수 있는 것이다.
그리고 하드웨어 리소스에 대한 접근은 사용자 모드(user mode)와 커널 모드(kernel mode)로 분리된다.
응용 프로그램은 기본적으로 사용자 모드로 실행이 되고 커널의 하드웨어 리소스에 접근하는 코드를 사용할 수 없다.
커널 모드는 커널의 하드웨어 리소스에 접근하는 코드를 사용할 수 있기 때문에 하드웨어 리소스에 접근할 수 있다.
그렇다면 기본적으로 사용자 모드로 실행되는 응용 프로그램에서 하드웨어 리소스를 필요로 한다면 어떻게 될까?
바로 시스템 콜을 통해 커널 모드로 전환한 뒤 커널의 하드웨어 리소스에 접근하는 코드를 사용한다.
시스템 콜은 소프트웨어 인터럽트 방식으로 인터럽트를 발생시킨다.
만약 응용 프로그램이 하드 디스크에 데이터를 저장하려고 한다면 다음과 같은 과정을 거친다.
- 유저 모드에서 시스템 콜을 발생시켜 커널 모드로 전환한다.
- 하드 디스크에 데이터를 저장한다.
- 다시 유저 모드로 전환한다.
이 과정은 아래 사진을 보면 쉽게 이해할 수 있다.
즉 응용 프로그램이 하드웨어 리소스를 필요로 할 때마다 시스템 콜을 통해 커널 모드로 전환한 뒤 하드웨어 리소스를 사용하고 다시 유저 모드로 전환하는 과정을 계속 거친다고 볼 수 있다.
출처
https://aws.amazon.com/ko/what-is/cli/
https://modulabs.co.kr/blog/introducing-os/
https://dkswnkk.tistory.com/389
'공부 > OS' 카테고리의 다른 글
[OS] 페이징(paging)과 세그먼테이션(segmentation) (0) | 2023.06.20 |
---|---|
[OS] 교착 상태 (deadlock) (0) | 2023.06.19 |
[OS] CPU scheduling 알고리즘 (0) | 2023.06.11 |
[OS] 프로세스 동기화 문제 (세마포어) (0) | 2023.05.27 |
[OS] 쓰레드의 개념과 프로세스와의 차이 (0) | 2023.05.25 |
댓글