[OS] 운영체제 기초 내용

Operating system basic concepts

운영체제의 설명과 사용 목적

운영체제(Operating System)란 사용자가 컴퓨터를 사용하기 필요한 소프트웨어를 말합니다. 대표적인 운영체제로는 Windows, Linux, macOS, iOS, Android 등이 존재합니다.

운영체제 사용의 대표적 목적은 시스템 자원인 컴퓨터 하드웨어를 관리하는 것입니다. 대표적인 예로는 CPU, 메모리, 디스크, 마우스, 모니터, 네트워크 등이 있습니다. 연결된 주변 기기와 가지고 있는 자원을 지속적으로 모니터링하고 이들에 접근할 수 있는 권한을 제공합니다.

또한 운영체제는 응용프로그램을 제어합니다. 컴퓨터가 가진 자원을 각각의 운영체제에 적절히 할당하고 회수하는 역할을 합니다. 프로세스 관리, 파일 관리, 디스크 관리, 네트워크 보호 및 보안 등의 작업이 여기에 속합니다.

끝으로 운영체제는 사용자와 컴퓨터간의 커뮤니케이션을 돕습니다. 사용자가 운영체제에 명령을 내리면 컴퓨터는 명령에 따른 동작을 수행하고 결과를 출력합니다. 사용자의 명령을 해석하고 기계에 전달하며, 반대의 과정을 수행할 때 그 사이를 매개하는 역할을 운영체제가 수행합니다.

운영체제 History

년대 특징 비고
1950년대 첫 번째 컴퓨터인 Eniac
1개의 응용프로그램만 실행
응용프로그램이 시스템 자원을 직접 제어
 
1960년대 초기 실행 프로그램이 많아짐
배치 처리 시스템 출현
배치 처리 시스템
ㆍ 여러 응용프로그램을 등록시켜 놓으면, 순차적으로 실행하는 시스템
ㆍ 배치 처리 시스템을 기반으로 운영체제가 출현
1960년대 후반 새로운 개념 제안
ㆍ시분할 시스템 (Time Sharing System)
ㆍ멀티 태스킹 (Multi-Tasking)
ㆍ실제 구현은 1970년대 진행
시분할 시스템: 다중 사용자를 지원하고, 컴퓨터 응답 시간을 최소화하는 시스템
멀티 태스킹: 단일 CPU에서 여러 응용 프로그램의 병렬 실행 시스템
1970년대 UNIX(유닉스) OS 등장
ㆍ미국 AT&T 벨 연구소의 데니스 리치가 C언어를 개발
ㆍ1970년대 이전 Assembly 언어로 소프트웨어 개발
ㆍCPU, Memory 제어를 컴퓨터마다 다시 개발하는 단점 존재
1980년대 개인용 컴퓨터 시대
CLI 환경에서 GUI 환경으로 변화
ㆍCLI: Command Line Interface
ㆍGUI: Graphic User Interface
1990년대 응용 프로그램 시대
네트워크 기술 발전
오픈소스 운동 활성화 시작
Killer Application 개념 등장
2000년대 이후 오픈소스 활성화
ㆍLinux OS
ㆍAparche
ㆍMySQL
가상머신, 대용량 병렬 처리 활성화
 

커널과 쉘

운영체제에서 응용프로그램, 운영체제, 하드웨어 리소스의 관계를 비유적으로 표현하기 위해 아래와 같은 관계를 정의하겠습니다.

  • 운영체제 도서관
  • 응용프로그램 시민
  • 하드웨어 리소스

도서관(운영체제)은 시민(응용프로그램)이 요청한 책(하드에워 자원)을 대여(자원 할당)하고, 기한이 지나면 책을 다시 회수(자원 회수)합니다. 이제 괄호 안에 있는 단어들로 바꾸어 읽어보면 운영체제가 어떤 역할을 하는지 개략적으로 알 수 있습니다.

사용자와 응용프로그램, 운영체제, 하드웨어의 관계는 어떻게 될까요? 그림으로 나타내면 아래와 같은 계층을 이루어 명령을 전달받고, 결과를 반환합니다. 자세한 설명은 여기에서 확인하실 수 있습니다.

os placement

위에서 하드웨어에 직접 명령을 전달하는 운영체제를 볼 수 있습니다. 이 부분에서 하드웨어 관리 정책, 조작 명령 등 운영체제 중 필수적인 개념이 저장된 영역을 커널(Kernel) 이라 합니다.

필수적인 개념이 저장된 영역에 대한 자세한 설명은 다음과 같습니다. 운영체제 역시 소프트웨어로 매우 큰 크기의 용량을 가지고 있으며 동작하기 위해서는 메모리 상에 적재되어야 합니다. 그러나 이 사용하지 않는 모든 부분을 적재하는 것은 한정적인 메모리를 낭비하는 일입니다. 따라서 가장 필수적인 부분만 적재하게 되는데 이를 커널(Kernel) 이라 합니다.

사용자가 명령을 전달하면 이 명령어는 어떤 동작을 하라는 것인지 해석되어야 비로소 커널에 전달되어 하드웨어를 제어할 수 있습니다. 이러한 명령어를 해석하는 부분이 바로 쉘(Shell) 입니다.

unix shell

사용자의 명령어를 기계어 형태로 변환하여 커널에 전달하는 인터페이스 역할이 바로 Shell 입니다. 아래 그림은 각 Circle Ring 영역에 따른 대표 기능 또는 명령어를 소개하고 있습니다. Utilities는 유닉스 계열 쉘에서 사용할 수 있는 명령어 형태의 인터페이스라고 생각해주시면 되겠습니다.

unix shell figure

이러한 쉘 문법을 만족하는 명령어들이 적힌 문서를 Shell Script (쉘 스크립트) 라 합니다. 이러한 문서를 이용해 특정 작업을 자동화하는 것을 쉘 프로그래밍이라 합니다. 삼성전자 현직자 얘기로는 반도체를 직접 절단하지 않고, 전기신호를 흘려 나오는 출력으로 정상적인 홀이 구성되었는지를 확인할 때에도 이러한 쉘 프로그래밍을 사용한다고 합니다.

시스템 콜

운영체제는 응용프로그램을 위해서도 인터페이스를 제공합니다. ls, who 등의 쉘 명령어는 사용자가 사용하는 것입니다. 이와 달리 open() 과 같은 인터페이스는 응용프로그램을 개발에 사용되어 메모리 상에서 적재되어 동작하는 동안 Kernel에 명령어를 전달해 하드웨어를 조작할 수 있도록 합니다. 이러한 인터페이스는 API 또는 Library 형태로 제공됩니다.

이렇게 응용소프트웨어가 커널에 접근하기 위한 인터페이스를 시스템 콜(System call) 이라고 합니다. 이러한 시스템 콜의 유형은 아래 다섯 가지로 나뉠 수 있습니다.

  • 프로세스 제어 (Process Control)
  • 파일 조작 (File Manipulation)
  • 장치 관리 (Device Management)
  • 정보 유지 (Information Maintenance)
  • 통신 (Communication)

이중 모드

현재의 컴퓨터 시스템은 한 개의 컴퓨터에 여러 사용자가 접속해 사용하는 형태입니다. 한 개의 서버에 여러 클라이언트가 접속하는 것을 떠올리면 쉽게 이해할 수 있습니다. 이런 상황에서 시스템 콜을 이용해 프로세스 종료 명령을 보내게 되면 자칫 서버 컴퓨터에 치명적인 오류를 불러와 모든 시스템이 다운될 수 있습니다.

군대에서도 실탄 사격의 경우 중앙 간부 지휘 아래 실시됩니다. 옆 사로 조교가 “야, 그냥 쏴봐” 라고 얘기해도 우리는 쏘지 않습니다. 이것처럼 명령의 종류가 나뉘어져 있는 것이 이중모드이다 라고 간단하게 생각하면 편할 것 같습니다.

즉, 커널에 명령을 전달할 때 우리는 User mode로 전달하지 않습니다. 현재 상태를 명령을 내릴 수 있는 Kernel mode로 바꾼 후 명령을 내리게 됩니다. 시스템 콜은 커널에 접근하는 인터페이스입니다. 따라서 시스템 콜을 호출할 때는 꼭 관리자 모드로 변환된 후 진행이 됩니다.

운영체제 서비스

이러한 운영체제 서비스를 그림 하나로 표현해보면 다음과 같이 나타낼 수 있습니다.

os service

Reference

Updated:

Leave a comment