운영체제
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
운영체제는 컴퓨터 하드웨어와 사용자 간의 인터페이스 역할을 하며, 컴퓨터 자원을 효율적으로 관리하고 사용자가 프로그램을 쉽게 실행할 수 있도록 돕는 핵심 소프트웨어이다. 초창기에는 단순한 기능만 제공되었으나, 일괄 처리, 멀티태스킹, 시분할 시스템, 가상 메모리 등의 기술 발전을 거쳐 현재는 다양한 종류와 기능을 갖추게 되었다. 운영체제는 커널, 사용자 인터페이스, API 등으로 구성되며, 하드웨어 추상화, 자원 관리, 컴퓨터 이용 효율 향상을 주요 목적으로 한다. 주요 운영체제로는 유닉스, 리눅스, 윈도우, macOS, 안드로이드 등이 있으며, 서버, 데스크톱, 모바일, 임베디드 시스템 등 다양한 환경에서 사용된다. 또한, 보안은 운영체제의 중요한 기능 중 하나이며, 인증, 권한 관리 등을 통해 시스템을 보호한다.
더 읽어볼만한 페이지
운영체제 | |
---|---|
기본 정보 | |
종류 | 시스템 소프트웨어 |
용도 | 컴퓨터 하드웨어 자원 관리 |
상세 정보 | |
주요 기능 | 프로세스 관리 메모리 관리 파일 시스템 장치 드라이버 네트워킹 보안 입출력 |
역할 | 응용 프로그램과 하드웨어 간의 인터페이스 제공 |
시장 점유율 (2024년 9월) | 윈도우: 72.33% 안드로이드: 13.98% macOS: 7.84% iOS: 4.47% 리눅스: 1.07% |
특수 목적 시스템 | 특정 목적을 위해 설계된 운영 체제 (예: 실시간 운영 체제) |
2. 역사
초기 컴퓨터는 운영체제 없이 작동했지만, 1950년대에 레지던트 모니터와 같이 기본적인 운영체제 기능들이 개발되었다. 이들은 프로그램의 자동 실행과 처리 속도 향상에 기여했다.[61] 초기 컴퓨터는 한 번에 하나의 프로그램만 실행 가능했지만, 이후 어셈블리어로부터의 기계어 발생이나 입출력 기능을 돕는 소프트웨어 라이브러리가 등장하면서 현대 운영체제의 시발점이 되었다.
1950년대에는 일괄 처리, 입출력 인터럽트, 버퍼링, 멀티태스킹, 스풀링, 런타임 라이브러리 등 다양한 기능이 운영체제에 포함되었다. 1959년에는 IBM 704, 709, 7090 메인프레임 컴퓨터를 위한 셰어 운영체제(SHARE)가 출시되기도 했다.
초기 마이크로컴퓨터는 메인프레임이나 미니컴퓨터용 운영체제를 사용하기에는 성능이 부족했기 때문에, '모니터스'라는 작은 운영체제가 개발되어 롬에서 불러와 사용되었다. 초기 디스크 기반 운영체제로는 CP/M이 널리 사용되었으며, MS-DOS(PC-DOS)와 유사했다. 1980년대 애플은 맥 OS 운영체제에 혁신적인 그래픽 사용자 인터페이스를 도입한 애플 매킨토시를 출시했다.
인텔 80386 CPU 칩 도입으로 개인용 컴퓨터에서도 멀티태스킹 운영체제 사용이 가능해졌다. 마이크로소프트는 데이비드 커틀러를 영입하여 윈도우 NT 개발을 이끌었고, 스티브 잡스는 NeXT를 설립하여 유닉스 계열 넥스트스텝 운영체제를 개발했다. 넥스트스텝은 훗날 애플에 인수되어 맥 OS X의 중심이 되었다.
리처드 스톨만의 GNU 프로젝트는 자유 소프트웨어로 유닉스를 대체하고자 했으나, GNU 허드 커널 개발은 지지부진했다. 1991년 리누스 토르발스가 리눅스 커널을 출시했고, GNU 유저랜드와 시스템 소프트웨어가 병합되어 운영체제를 이루게 되었다. BSD는 1970년대부터 미니컴퓨터에 포팅되었으며, FreeBSD, NetBSD, OpenBSD와 같이 개인용 컴퓨터에도 사용되었다.
1940년대 후반과 1950년대 초의 최초 컴퓨터는 기계어를 사용하여 직접 프로그래밍되었으며, 프로그래밍 언어나 운영 체제는 없었다. 1950년대 중반 트랜지스터가 도입된 후 메인프레임이 제작되기 시작했다. 이러한 메인프레임은 여전히 전문 운영자가 필요했는데, 이들은 프로그램 실행 예약 등 현대 운영 체제가 수행하는 작업을 수동으로 수행했다.[10] 하지만 메인프레임은 포트란 모니터 시스템(FMS)과 IBSYS와 같은 기본적인 운영 체제를 가지고 있었다.
운영체제는 사용자와 응용 소프트웨어, 하드웨어 사이에 위치하여 표준 인터페이스를 제공하고, 자원을 효율적으로 관리한다. 주요 기능으로는 파일 시스템, 가상 메모리, 멀티태스킹, GUI, 네트워크 등이 있다.
상품으로서의 OS는 데스크톱 환경, 윈도우 시스템, 미들웨어, 파일 관리 소프트웨어, 에디터, 설정 도구, 웹 브라우저 등을 포함하기도 한다.
컴퓨터 유형별 주요 운영체제
유형 | 운영체제 | 점유율 (2021년 기준) | 비고 |
---|---|---|---|
스마트폰 | 안드로이드 | 약 72%[44] | 리눅스 기반 |
스마트폰 | iOS | 약 27%[44] | |
노트북 및 데스크톱 | 마이크로소프트 윈도우 | 75.4%[45] | |
노트북 및 데스크톱 | macOS | 15.93%[45] | FreeBSD 기반, 유닉스 계열 |
노트북 및 데스크톱 | 크롬 OS | 2.59%[45] | |
노트북 및 데스크톱 | 리눅스 | 2.33%[45] | |
슈퍼컴퓨터 | 리눅스 | 거의 100%[46] | 2000년대 유닉스에서 전환 |
임베디드 시스템 | TRON(트론) 계열 | 약 60% (2019년 기준)[47] | ITRON이 가장 보편적 |
임베디드 시스템 | POSIX 계열 | 유닉스 계열, 리눅스 계열 등 |
1950년대에는 운영 체제라는 개념이 등장하기 시작했다. 초기 컴퓨터는 운영 체제가 없었지만, 시스템 관리용 소프트웨어나 하드웨어 사용을 간소화하는 도구는 곧 등장하여 점차 그 활용 범위를 넓혀 갔다. 최초의 운영 체제는 IBM 701용으로 제너럴 모터스가 개발한 것, IBM 704용으로 제너럴 모터스와 노스롭 그루먼(North American Aviation)이 공동 개발한 것 등 많은 후보가 있지만, 어떤 기능이 탑재되었을 때 운영 체제라고 부를지는 기준에 따라 다르다. 이 시대의 것을 운영 체제라고 부르지 않는 경우도 있다.[53]
당시에는 펀치 카드 등으로 입력된 프로그램을 자기 테이프에 일단 저장하고, 그 자기 테이프를 대형 컴퓨터에 연결한 후 프로그램을 로드하여 실행했다. 따라서 입출력 장치 드라이버에 해당하는 것이 만들어졌다. 또한 어셈블러와 컴파일러가 등장하기 시작한 시대이므로, 먼저 컴파일러를 로드한 다음 프로그램(소스 코드)을 로드하고, 컴파일 결과로 출력된 어셈블리어를 어셈블하기 위해 어셈블러를 로드하는 등의 절차가 필요했다. 이러한 작업을 자동화하는 '''일괄 처리'''가 운영 체제의 기능으로 구현되었다. 또한 프로세스의 상태를 감시하는 모니터도 구현되었다.
2. 1. 메인프레임 시대
1960년대에 IBM은 최초의 상호 호환 가능한 컴퓨터 시리즈인 시스템/360을 도입했다. 이들은 모두 수백만 줄의 어셈블리어로 구성되어 수천 개의 버그를 포함한 동일한 운영 체제인 OS/360을 실행했다.[10] OS/360은 멀티프로그래밍을 지원하는 최초의 대중적인 운영 체제였으며, CPU는 다른 작업이 입출력(I/O)을 기다리는 동안 한 작업에 사용될 수 있었다.[10] 메모리에 여러 작업을 유지하려면 메모리 파티셔닝과 다른 작업에 할당된 메모리에 접근하지 못하도록 보호하는 기능이 필요했다.[10]

1964년 발표된 IBM System/360 시리즈에 탑재된 OS/360 및 DOS/360은 세계 최초의 상용 운영 체제로 여겨진다. 단일 OS 시리즈로 폭넓은 모델(성능, 용량, 가격대)과 주변 기기를 작동시켰고, 하드 디스크 드라이브를 지원했으며, 본격적인(선점형) 멀티태스킹을 실현했다. "운영 체제"라는 용어가 일반화된 것도 OS/360부터이다.
이 당시 또 다른 중요한 발전으로는 시분할 시스템의 본격적인 실용화가 있다. 컴퓨터 자원을 여러 사용자가 동시에 사용할 수 있도록 함으로써 시스템을 효율적으로 이용하는 것이다. 시분할 시스템은 각 사용자에게 마치 고가의 머신을 독점하고 있는 것처럼 동작했다. 1965년의 Multics 시분할 시스템은 특히 유명하다. 1967년에는 System/360용으로 상용 최초의 가상화 운영 체제(가상 머신)인 CP-40과 CP-67(z/VM)이 등장하여, 하나의 컴퓨터에서 동시에 여러 운영 체제를 작동할 수 있게 되었는데, 이것 또한 시분할 시스템의 응용이다.
가상 기억은 1961년의 버로우즈 B5000이 상용 최초로 여겨지며, 1970년의 IBM System/370 시리즈용 OS/VS에서 널리 보급되었다.
2. 2. 마이크로컴퓨터 시대


대규모 집적 회로의 발명으로 1980년경부터 개인용 컴퓨터(초기에는 마이크로컴퓨터라고 불림)가 생산되기 시작했다.[47] 약 5년 동안 CP/M(Control Program for Microcomputers)은 마이크로컴퓨터에서 가장 인기 있는 운영 체제였다.[47] 나중에 IBM은 마이크로소프트로부터 DOS(Disk Operating System)를 구입했다. IBM의 요청에 따라 수정된 시스템은 MS-DOS(Disk Operating System영어)라고 불리며 IBM 마이크로컴퓨터에서 널리 사용되었다. 후속 버전에서는 UNIX의 기능을 일부 차용하여 성능이 향상되었다.[47]
애플의 맥킨토시는 그래픽 사용자 인터페이스(GUI)를 사용한 최초의 인기 컴퓨터였다. GUI는 이전 운영 체제에서 사용했던 텍스트 전용 명령줄 인터페이스보다 훨씬 더 사용자 친화적이었다. 맥킨토시의 성공에 이어 MS-DOS는 윈도우라는 GUI 오버레이로 업데이트되었다. 윈도우는 나중에 독립 실행형 운영 체제로 다시 작성되었는데, 다른 운영 체제(VAX VMS)에서 많은 기능을 차용하여 대규모 소송 합의가 이루어졌습니다.[47]
2. 3. 유닉스와 리눅스의 등장

1960년대 말 벨 연구소에서 개발된 유닉스는 소스 코드가 공개되었기 때문에 여러 다른 운영 체제의 기반이 되었다.[10] 그중 가장 성공적인 것은 AT&T의 시스템 V와 캘리포니아 대학교의 버클리 소프트웨어 배포판(BSD)이었다.[10] IEEE는 운영 체제 응용 프로그램 인터페이스(API)에 대한 POSIX 표준을 발표하여 호환성을 높였으며, 이는 대부분의 유닉스 시스템에서 지원된다.[10]
리처드 스톨만은 사유 유닉스 운영체제를 대체하는 자유 소프트웨어를 목표로 GNU 프로젝트를 시작하였다. 이 프로젝트가 유닉스 여러 곳의 기능을 복제하는 데는 큰 성공을 거두었으나, GNU 허드 커널 개발은 비생산적인 것으로 입증되었다. 1991년 핀란드 컴퓨터 과학부 학생인 리누스 토르발스는 최초의 리눅스 커널 버전을 출시하였다. 곧 GNU 유저랜드와 시스템 소프트웨어에 병합되면서 컴퓨터 운영체제를 이루게 되었다. BSD는 유닉스 계열로서 1970년대에 시작하여 수많은 미니컴퓨터에 포팅되었으며 마침내 FreeBSD, NetBSD, OpenBSD와 같이 개인용 컴퓨터에도 쓰이게 되었다.
리눅스는 GNU 일반 공중 사용 허가서(GPL)에 따라 배포되는 자유 소프트웨어이며, 모든 파생 제품이 법적으로 소스 코드를 공개해야 함을 의미한다.[43] 그 설계는 마이크로커널을 사용하지 않는 다른 유닉스 시스템과 유사하다.[43] C로 작성되었으며[43] 유닉스 시스템 V 구문을 사용하지만 BSD 구문도 지원한다. 리눅스는 표준 유닉스 네트워킹 기능과 유닉스 도구의 전체 모음을 지원하며, 다중 사용자를 지원하고 선점형 멀티태스킹을 사용한다. 처음에는 최소한의 설계였지만, 리눅스는 16MB 미만의 RAM에서도 작동할 수 있는 유연한 시스템이며, 대규모 다중 프로세서 시스템에서도 사용된다.[43] 다른 유닉스 시스템과 마찬가지로, 리눅스 배포판은 커널, 시스템 라이브러리, 시스템 유틸리티로 구성된다.[43] 리눅스는 데스크톱, 폴더, 파일 아이콘이 있는 그래픽 사용자 인터페이스(GUI)를 가지고 있으며, 명령줄을 통해 운영 체제에 접근할 수 있는 옵션도 있다.[43]
미닉스는 1987년 교육용으로 개발된 유닉스의 축소판으로, 상업적으로 이용 가능한 자유 소프트웨어인 리눅스에 영감을 주었다. 2008년 이후 미닉스는 대부분의 인텔 마이크로칩의 컨트롤러에 사용되는 반면, 리눅스는 데이터 센터와 안드로이드 스마트폰에 널리 사용되고 있다.[10]
2. 4. 윈도우의 발전과 경쟁
1980년대에 마이크로소프트는 MS-DOS를 통해 개인용 컴퓨터 운영체제 시장을 장악했다.[61] MS-DOS는 IBM PC에 널리 쓰였던 운영체제로, IBM 버전은 PC-DOS로 불렸다. 애플은 맥 OS 운영체제에 혁신적인 그래픽 사용자 인터페이스(GUI)를 갖춘 애플 매킨토시 컴퓨터를 도입하여 경쟁하였다.1990년대에는 32비트 아키텍처에 페이징 기능을 갖춘 인텔 80386 CPU 칩이 도입되면서 개인용 컴퓨터에서도 멀티태스킹 운영체제를 사용할 수 있게 되었다. 마이크로소프트는 DEC에서 VMS 운영체제를 개발했던 데이비드 커틀러를 영입하여 윈도우 NT 운영체제 개발을 이끌었다. 윈도우 NT는 안정성과 성능이 개선된 운영체제였다. 애플의 공동 창립자 스티브 잡스는 NeXT 컴퓨터사를 설립하고 유닉스 계열 넥스트스텝 운영체제를 개발했다. 넥스트스텝은 훗날 애플에 인수되어 FreeBSD 코드와 함께 macOS의 중심이 되었다.
이후 윈도우는 NT 커널 기반으로 통합되었는데, 2001년의 Microsoft Windows XP 부터였다.
2. 5. 모바일 운영체제 시대
2000년대 후반부터 스마트폰과 태블릿 PC가 등장하면서 모바일 컴퓨팅이 일반화되었고, 이에 따라 모바일 운영체제 시장이 급성장했다.[54] 이러한 모바일 기기들은 카메라, GPS(Global Positioning System), 가속도 센서, 자이로스코프, 무선랜(Wi-Fi), 블루투스 등 다양한 기능을 내장하고, 좁은 화면에 최적화된 터치패널 인터페이스를 제공한다.iOS와 안드로이드 같은 모바일 운영체제는 휴대 기기의 저전력 요구에 맞춰 개발되었다.[54] 구글의 안드로이드와 애플의 iOS가 경쟁하며 시장을 주도하고 있다. 2021년 9월 기준으로 안드로이드는 약 72%, iOS는 약 27%의 시장 점유율을 기록했다.[44] 안드로이드는 리눅스 커널을 기반으로 하며, 다양한 오픈 소스 소프트웨어를 결합한 운영체제이다.
2. 6. 한국 운영체제 개발 노력
한국은 1990년대부터 '구름', '한컴 아시아눅스' 등 독자적인 운영체제 개발 노력을 기울여왔으나, 시장 점유율 확보에는 어려움을 겪었다. 티맥스OS, 하모니카 OS 등 다양한 리눅스 기반 운영체제 개발이 지속되고 있다.3. 목적
- 하드웨어 추상화: 컴퓨터는 제조 회사마다 부품의 세부 사양이 다를 수 있다. 운영체제는 하드웨어를 추상화하여 통일된 사용 방법을 제공함으로써, 응용 프로그램 개발자가 각 하드웨어의 차이점을 신경 쓰지 않고도 쉽게 개발할 수 있도록 돕는다.
- 자원 관리: 여러 응용 프로그램을 동시에 실행할 때, 각 프로그램이 서로 간섭하지 않고 독립적으로 동작하도록 자원을 관리한다. 자원 요청에 충돌이 발생하면, 운영체제는 프로그램들을 대기시키거나 오류를 반환하는 등 적절하게 처리한다.
- 컴퓨터 이용 효율 향상: 여러 작업을 동시에 실행할 때, 자원 할당 순서나 처리 시간을 조절하여 전체 작업 처리량을 높인다. 이는 웹 서버나 데이터베이스처럼 많은 요청을 처리해야 하는 환경에서 특히 중요하다.
이 외에도 운영체제는 다음과 같은 중요한 역할을 한다.
- 사용자에게 컴퓨터 프로그램을 쉽고 효율적으로 실행할 수 있는 환경을 제공한다.
- 컴퓨터 시스템의 하드웨어 및 소프트웨어 자원을 여러 사용자 간에 효율적으로 할당하고, 관리하며, 보호한다.
- 사용자 프로그램의 오류나 잘못된 자원 사용을 감시하고, 입출력 장치 등 자원의 연산과 제어를 관리한다.
4. 구성 요소
운영체제는 커널, 사용자 인터페이스, API 등 다양한 구성 요소로 이루어져 있다.
- 커널: 운영체제의 가장 중요한 요소로, 낮은 수준의 프로세스를 제어한다. 여기에는 메모리 읽기/쓰기, 프로세스 실행, 장치 정보 송수신, 네트워크 정보 해석 등이 포함된다.
- 사용자 인터페이스: 사용자가 프로그램을 직접 제어하고 사용할 수 있게 하는 기능이다. 아이콘과 바탕 화면을 지닌 그래픽이나 명령 줄을 지닌 문자 형태를 띨 수 있다.
- API: 응용 프로그램이 다른 프로그램과 상호 작용할 수 있게 하는 서비스와 코드 라이브러리의 집합이며, 운영체제 자체라고 할 수 있다.
윈도우는 사용자 인터페이스를 운영체제의 일부로 여기지만, 리눅스는 그렇지 않은 경우가 많다. 컴퓨터 시스템은 운영체제, 셸, 필수 유틸리티의 세 부분으로 구분하기도 한다. 셸은 사용자가 시스템을 운용하게끔 해주는 기본적인 응용 프로그램이지만, 운영체제 입장에서는 셸이나 필수 유틸리티나 모두 응용 프로그램일 뿐이다.[66]
운영체제를 이루는 요소는 컴퓨터의 다른 부분들과 함께 동작하게 만들기 위해 존재한다. 금융 데이터베이스부터 영화 편집 프로그램에 이르기까지 모든 소프트웨어는 하드웨어를 이용하기 위해 운영체제를 통해 실행되어야 한다.
4. 1. 커널
커널은 운영 체제의 핵심 부분으로, 하드웨어 제어, 메모리 관리, 프로세스 관리 등 핵심 기능을 담당한다. 펌웨어 및 장치 드라이버의 도움을 받아 컴퓨터의 모든 하드웨어 장치에 대한 기본적인 제어를 제공한다. 램 상의 프로그램의 메모리 접근을 관리하고, 어떤 프로그램이 어떤 하드웨어 자원에 대한 접근 권한을 얻을지 결정하며, 항상 운영이 최적화되도록 CPU의 상태를 설정하고, 파일 시스템과 함께 디스크, 자기 테이프, 플래시 메모리와 같은 장기적인 비휘발성 메모리에서 데이터의 구성을 수행한다.
운영 체제 내에서 커널의 영역과 구성에 따라 모노리딕 커널, 마이크로 커널 등으로 분류한다.
4. 1. 1. 프로그램 실행
운영체제는 응용 프로그램과 하드웨어 사이의 인터페이스 역할을 한다.[66] 운영체제는 응용 프로그램 개발을 단순하게 하는 서비스 집합이다. 프로그램을 실행하면 운영체제가 프로세스를 만든다. 커널은 메모리와 다른 자원을 할당하여 프로세스를 만들며, 이로써 멀티태스킹 환경에서 프로세스에 대한 우선 순위를 확립하고, 메모리에 프로그램 코드를 적재하며 프로그램을 실행한다. 그 뒤 프로그램은 사용자 및 장치와 상호작용한 다음 원하는 명령을 수행하게 된다.운영체제는 프로세스[66] 들을 생성하거나 삭제하고, 중단시키거나 재개시킨다. 또한, 프로세스 간의 동기화와 통신, 교착 상태 처리에 관한 메커니즘을 제공한다.
- 사용자 및 시스템 프로세스의 생성과 종료 관리
- 프로세스의 일시 중지와 속개
- 프로세스 동기화를 위한 수단의 제공
- 프로세스 간 통신을 위한 수단의 제공
- 교착 상태 처리를 위한 수단의 제공
4. 1. 2. 인터럽트
인터럽트는 운영체제가 주변 환경에 효율적으로 반응하고 상호작용할 수 있도록 하는 핵심적인 역할을 한다.[61] 운영체제가 이벤트(폴링)를 감지하는 다른 방법으로는 스택이 매우 작은 구형 운영체제에서 사용되는 폴링 방식이 있지만, 스택이 큰 현대 운영체제에서는 드물다. 인터럽트 기반 프로그래밍은 대부분의 현대 CPU에서 직접 지원된다. 인터럽트는 컴퓨터가 자동으로 로컬 레지스터 컨텍스트를 저장하고 이벤트에 반응하는 특정 코드를 실행하도록 한다. 매우 기본적인 컴퓨터들도 하드웨어 인터럽트를 지원하며, 프로그래머는 이벤트 발생 시 실행될 코드를 지정할 수 있다.프로그램이 운영체제에 인터럽트를 발생시키는 경우도 있다. 예를 들어 프로그램이 하드웨어에 접근하려 할 때 운영체제 커널을 가로막아 제어권을 커널에 넘겨줄 수 있다. 그러면 커널은 요청을 처리한다. 프로그램이 메모리나 공유 자원과 같은 추가 자원을 필요로 할 때도 커널에 인터럽트를 발생시켜 알릴 수 있다.
인터럽트는 운영 체제가 주변 환경과 상호 작용하고 반응하기 위한 효율적인 수단이다. 매우 작은 스택(50바이트 또는 60바이트)을 가진 구형 시스템에서는 운영 체제가 처리해야 하는 이벤트 발생 원인을 "감시"하는 폴링 방식을 채택했지만, 현대의 큰 스택을 가진 시스템에서는 일반적이지 않다. 현대의 많은 CPU는 인터럽트 기반 프로그래밍을 직접 지원한다. 인터럽트가 발생하면, 그 시점의 레지스터 컨텍스트를 저장하고, 해당 이벤트에 대응하는 특정 코드를 실행한다. 매우 기본적인 컴퓨터에도 하드웨어 인터럽트 기능이 있으며, 프로그래머는 특정 인터럽트가 발생했을 때 실행할 코드를 설정할 수 있다.
인터럽트를 수신하면, 컴퓨터 하드웨어는 실행 중인 프로그램을 자동 일시 중지하고, 상태를 저장한 후, 해당 인터럽트에 미리 할당된 코드를 실행한다. 이는 독서 중 전화가 울리면 책에 책갈피를 끼우고 전화를 받는 것과 유사하다. 현대 운영 체제에서는 인터럽트를 운영 체제 커널이 처리한다. 인터럽트는 컴퓨터 하드웨어가 발생시키거나, 실행 중인 프로그램이 발생시킬 수 있다.
하드웨어 인터럽트가 발생하면 운영 체제 커널은 일반적으로 어떤 처리 코드를 실행하여 해당 이벤트에 대응할지 결정한다. 인터럽트에는 우선순위가 있어 실행할 코드를 결정하는 데 영향을 준다. 예를 들어 전화가 울리는 동시에 화재 비상벨이 울린다면, 전화를 받지 않고 대피할 것이다. 하드웨어 인터럽트 처리는 보통 디바이스 드라이버라는 소프트웨어에 위임된다. 디바이스 드라이버는 운영 체제 커널의 일부일 수도, 별도 프로그램일 수도, 혹은 혼합된 형태일 수도 있다. 디바이스 드라이버는 인터럽트를 통해 얻은 정보를 다양한 방법으로 실행 중인 프로그램에 전달한다.
실행 중인 프로그램이 운영 체제에 인터럽트를 발생시킬 수도 있다. 예를 들어 프로그램이 하드웨어에 접근하려는 경우, 운영 체제 커널에 인터럽트를 발생시켜 제어를 커널로 넘길 수 있다. 그러면 커널은 필요한 처리를 수행한다. 프로그램이 메모리와 같은 추가 자원을 요청할 때도 인터럽트를 발생시켜 커널에 알린다. 그러나 이러한 것들은 일반적으로 시스템 콜이라 불리며, 하드웨어 인터럽트와 구현 방식이 다를 수 있다.
4. 1. 3. 모드
커널은 운영 체제의 일부로, 서로 다른 응용 프로그램과 사용자 간의 보호를 제공한다. 이러한 보호는 오류를 하나의 프로그램으로 제한함으로써 안정성을 향상시키고, 악성 소프트웨어의 기능을 제한하고 개인 데이터를 보호하며, 하나의 프로그램이 컴퓨터의 리소스를 독점할 수 없도록 함으로써 보안을 강화하는 데 중요하다.[1] 대부분의 운영 체제는 사용자 모드와 수퍼바이저 모드, 두 가지 동작 모드를 갖는다.[2] 사용자 모드에서는 하드웨어가 소프트웨어가 합법적인 명령어만 실행하고 있는지 확인하는 반면, 커널은 무제한적인 권한을 가지며 이러한 확인의 대상이 아니다.[3] 커널은 다른 프로세스의 메모리를 관리하고 입출력 장치에 대한 액세스를 제어한다.[4]
현대적인 CPU에는 여러 운영 모드가 있다. 그 경우, 최소한 사용자 모드와 수퍼바이저 모드 두 가지가 존재한다. 수퍼바이저 모드는 운영 체제의 커널이 사용하는 모드로, 하드웨어에 무제한으로 접근할 수 있으며, 메모리의 읽기 및 쓰기 방법을 제어하거나, 그래픽 카드와 같은 장치와 상호 작용할 수 있다. 반면 사용자 모드는 커널 이외의 거의 모든 것이 사용한다. 애플리케이션은 사용자 모드에서 작동하며, 하드웨어와의 상호 작용은 커널을 통해 수행해야 한다. CPU는 2개 이상의 모드를 가지는 경우도 있으며, 오래된 프로세서를 에뮬레이트하는 데 사용하기도 한다.
컴퓨터가 시작될 때는 자동으로 수퍼바이저 모드에서 작동한다. BIOS나 EFI, 부팅 로더, 운영 체제의 커널과 같은 일부 프로그램만 수퍼바이저 모드에서 작동한다. 이렇게 되어 있는 것은 사용자 모드 환경의 초기화는 그 외부에 있는 프로그램이 아니면 할 수 없기 때문이다. 그러나 운영 체제가 다른 프로그램에 제어권을 넘길 때는 CPU를 사용자 모드로 설정할 수 있다.
사용자 모드에서는 프로그램이 사용할 수 있는 CPU의 명령어 집합이 제한되어 있다. 사용자 프로그램에서 사용자 모드를 빠져나가려면, 인터럽트를 발생시켜 커널에 제어권을 반환한다. 그렇게 해서 하드웨어 및 메모리에 대한 접근과 같은 것에 대한 독점적 제어를 운영 체제가 유지한다.
4. 1. 4. 메모리 관리
운영체제 커널은 프로그램이 사용 중인 모든 시스템 메모리를 관리해야 한다. 이는 프로그램이 다른 프로그램이 이미 사용 중인 메모리를 침범하지 않도록 보장한다. 프로그램들은 시분할로 작동하므로 각 프로그램의 독립적인 메모리 접근이 가능하다.초기 운영 체제에서 자주 사용되었던 협조적 메모리 관리는 모든 프로그램이 자발적으로 커널의 메모리 관리 메커니즘을 사용하고 할당된 메모리를 벗어나지 않고 작동하는 것을 전제로 한다. 하지만 프로그램에는 버그가 있을 수 있고, 할당된 메모리를 초과하는 경우가 발생할 수 있기 때문에 이러한 메모리 관리는 현재는 거의 사용되지 않는다. 프로그램이 오작동하면 다른 프로그램이 사용 중인 메모리를 덮어쓸 수도 있다. 악의적인 프로그램이나 컴퓨터 바이러스가 의도적으로 다른 프로그램의 메모리를 덮어쓰거나 운영 체제 자체의 작동을 방해할 수도 있다. 협조적 메모리 관리에서는 단 하나의 프로그램이 오작동해도 시스템 전체가 다운될 수 있다.
커널에 의한 메모리 보호를 통해 프로세스의 메모리에 대한 접근을 제한한다. 메모리 보호에는 다양한 기법이 있으며, 세그먼트 방식과 페이징 방식이 대표적이다. 어떤 기법이든 하드웨어 지원이 필요하며(예: 80286의 MMU), 모든 컴퓨터가 그러한 하드웨어 메커니즘을 갖추고 있는 것은 아니다.
세그먼트 방식이나 페이징 방식 모두 CPU 내부의 사용자 접근 불가 레지스터에서 사용자 프로그램이 접근 가능한 메모리 주소의 범위를 설정한다. 그 범위를 벗어난 주소에 접근하려고 하면 인터럽트가 발생하여 CPU가 수퍼바이저 모드로 전환되고 커널이 그 상황을 처리한다. 이것을 세그멘테이션 위반이라고 한다. 세그멘테이션 위반은 일반적으로 프로그램의 오류로 발생하므로 실행을 계속하는 등의 대처는 어렵고, 커널은 문제의 프로그램을 강제 종료하고 에러를 보고하는 것이 일반적이다.
윈도우 3.1부터 윈도우 Me까지는 메모리 보호 메커니즘이 있었지만, 이를 우회하는 것도 쉬웠다. 그래서 세그멘테이션 위반 발생을 알리는 일반 보호 위반(general protection fault)이 고안되었지만, 시스템이 다운되는 경우가 많았다.
페이징이나 세그먼테이션에 의한 가상 메모리를 사용함으로써, 커널은 임의의 시점에서 각 프로그램이 사용하는 메모리를 선택할 수 있으며, 같은 메모리 위치를 여러 작업에 사용하게 할 수도 있다.
어떤 프로그램이 사용 가능한 현재 메모리 범위이지만 물리적 메모리가 할당되지 않은 위치에 접근하려고 할 때, 세그먼테이션 위반처럼 인터럽트에 의해 커널로 전환된다. 유닉스 계열에서는 이러한 인터럽트를 페이지 부재라고 부른다.
커널이 페이지 부재를 받으면, 그 프로그램에 할당된 가상 메모리 공간을 조정하고, 요청된 메모리 접근이 가능하도록 물리적 메모리를 할당한다. 이에 따라 커널은 각 애플리케이션에 대한 메모리 할당을 자유롭게 결정할 수 있으며, 더 나아가 실제로는 할당하지 않고 둘 수도 있다.
현대적인 운영 체제에서는, 상대적으로 접근 빈도가 낮은 메모리를 임시적으로 디스크와 같은 보조 기억 장치에 보관하고, 주기억장치를 다른 프로그램을 위해 비워둘 수 있다. 이것을 스와핑이라고 부르며, 제한된 메모리를 여러 프로그램에서 사용 가능하게 하고, 메모리 내용을 필요에 따라 보관하거나 복구할 수 있다.
가상 메모리에 의해, 실제로 탑재하고 있는 것보다 많은 RAM을 사용하고 있는 것 같은 느낌으로 컴퓨터를 사용할 수 있다.[50]
4. 1. 5. 가상 메모리
가상 메모리 주소 지정(페이징 또는 세분화와 같은)을 사용하면 커널은 특정 시점에 각 프로그램이 사용할 수 있는 메모리를 선택할 수 있으므로, 운영 체제는 여러 작업에 동일한 메모리 위치를 사용할 수 있다.
프로그램이 접근할 수 없는 메모리에 접근하려고 시도하지만, 그럼에도 불구하고 프로그램에 할당된 경우 커널이 인터럽트된다. 이러한 종류의 인터럽트는 일반적으로 페이지 부재이다.
커널이 페이지 부재를 감지하면 일반적으로 트리거된 프로그램의 가상 메모리 범위를 조정하여 요청된 메모리에 대한 액세스 권한을 부여한다. 이를 통해 커널은 특정 애플리케이션의 메모리가 저장되는 위치 또는 메모리가 아직 할당되었는지 여부를 자유롭게 제어할 수 있다.
최신 운영 체제에서는 빈도가 낮은 메모리는 다른 프로그램에서 사용할 수 있도록 디스크 또는 기타 미디어에 임시로 저장할 수 있다. 이를 스와핑이라고 하며, 메모리 영역을 여러 프로그램에서 사용할 수 있고, 메모리 영역의 내용은 필요에 따라 스왑하거나 교환할 수 있다.
가상 메모리는 프로그래머 또는 사용자에게 실제로 존재하는 RAM보다 훨씬 많은 양의 RAM이 컴퓨터에 있는 것처럼 인식하게 해준다.[39]
4. 1. 6. 멀티태스킹
멀티태스킹은 컴퓨터 운영 체제의 핵심 기능 중 하나로, 여러 개의 프로그램(프로세스)을 동시에 실행하는 것처럼 보이게 하는 기술이다. 이는 사용자가 여러 작업을 동시에 처리할 수 있게 해준다.[50]동작 방식:
- 프로세스 전환: CPU는 매우 빠른 속도로 여러 프로세스를 번갈아 가며 실행한다. 이때 각 프로세스에는 아주 짧은 시간(타임 슬라이스)이 할당되며, 이 시간이 지나면 다른 프로세스로 전환된다. 이러한 빠른 전환 덕분에 사용자에게는 여러 프로그램이 동시에 실행되는 것처럼 느껴진다.
- 스케줄링: 운영 체제의 커널에는 스케줄러라는 소프트웨어가 포함되어 있다. 스케줄러는 어떤 프로세스를 얼마 동안 실행할지 결정하는 역할을 한다.
- 컨텍스트 스위칭: 커널과 응용 프로그램 간의 제어 전환을 컨텍스트 스위칭이라고 한다.
멀티태스킹의 종류
- 협력형 멀티태스킹 (Cooperative Multitasking): 초기 운영 체제에서 사용되던 방식이다. 각 프로그램이 자발적으로 CPU 사용을 양보해야 다른 프로그램이 실행될 수 있었다. 만약 하나의 프로그램에 문제가 생겨 무한 루프에 빠지면, 시스템 전체가 멈추는(freezing) 문제가 발생할 수 있다.
- 선점형 멀티태스킹 (Preemptive Multitasking): 현대 운영 체제에서 주로 사용되는 방식이다. 운영 체제가 각 프로그램에 일정 시간(time slice)을 할당하고, 시간이 지나면 강제로 다른 프로그램으로 실행을 전환한다. 이 방식은 특정 프로그램의 문제로 시스템 전체가 멈추는 현상을 방지할 수 있다.
현대의 멀티태스킹:
- 현대 운영 체제는 선점형 멀티태스킹을 사용하며, 사용자 모드(응용 프로그램)뿐만 아니라 장치 드라이버와 커널 코드에도 적용하여 실시간 성능을 향상시킨다.
- 단일 사용자 운영 체제에서도 평가가 잘 된 소수의 프로그램만 사용하는 경우 협력형 멀티태스킹으로도 문제가 없는 경우가 있다. (예: 호비 컴퓨터)
- 아미가OS는 초기 버전부터 선점형 멀티태스킹을 구현했다.
- Windows에서 처음으로 선점형 멀티태스킹을 구현한 것은 Windows NT이지만, 일반 가정용으로 출시된 것은 Windows XP부터였다.
관련 개념:
- 스레드: 하나의 프로세스를 여러 개의 작은 실행 단위로 나눈 것이다. 스레드는 프로세스 내에서 자원을 공유하며 동시에 실행될 수 있다.
- 병렬 컴퓨팅: 여러 개의 CPU를 사용하여 여러 스레드를 동시에 실행하는 기술이다. 병렬 처리는 프로그램의 실행 속도를 높일 수 있다.
4. 1. 7. 디스크 접근 및 파일 시스템
파일 시스템은 운영 체제가 하드 디스크, SSD 등 영구 저장 장치에 데이터를 효율적으로 저장하고 관리하는 방식이다. 파일 시스템은 사람이 읽을 수 있는 파일 이름과 기타 정보를 제공하며, 성능 향상 및 데이터 손상 방지 기능을 포함한다.[50]파일 시스템은 파일(데이터의 모음)과 디렉터리(폴더라고도 함)로 구성된다. 파일 경로는 루트 디렉터리에서 시작하여 하위 디렉터리를 나열하는 절대 경로와 현재 디렉터리 기준 상대 경로로 나뉜다.[50]
응용 프로그램은 시스템 호출을 통해 파일을 생성, 삭제, 열기, 닫기, 연결, 읽기, 쓰기 등의 작업을 수행하며, 운영 체제가 이를 처리한다. 운영 체제는 최근 요청된 메모리 블록을 캐시에 저장하고, 다음에 필요할 수 있는 데이터를 미리 가져오는 등의 방법으로 지연 시간을 줄인다.[50]
장치 드라이버는 각 입출력 장치에 특정한 소프트웨어로, 운영 체제가 서로 다른 하드웨어에서 수정 없이 작동할 수 있도록 한다.[50]
파일 시스템은 파일의 이름과 메타데이터를 해당 내용이 저장된 데이터 블록에 매핑하는 사전 역할을 한다. 대부분의 파일 시스템은 디렉터리를 사용하여 파일 이름을 파일 번호로 변환하고, 운영 체제는 인덱스를 사용하여 블록 번호를 찾는다. 사용 가능한 공간 맵은 사용 가능한 블록을 추적하며, 성능을 위해 파일을 그룹화하거나 재구성하여 단편화를 줄이기도 한다.[50]
컴퓨터 충돌이나 하드웨어 오류 발생 시 데이터 안정성을 유지하는 것도 중요하다. 파일 쓰기 프로토콜은 원자적 작업으로 설계되어 부분적으로 쓰여진 일관성 없는 상태를 방지한다. 데이터 손상은 중복 저장(예: RAID) 및 체크섬을 통해 해결되며, 여러 계층의 체크섬과 파일 백업을 사용하면 시스템이 여러 하드웨어 오류에서 복구할 수 있다.[50]
4. 1. 8. 장치 드라이버
장치 드라이버는 하드웨어와 상호 작용하기 위한 소프트웨어이다. 일반적으로 하드웨어와 통신하는 인터페이스를 가지며, 하드웨어가 연결되는 통신 서브시스템이나 버스를 통해 통신한다.[61] 하드웨어에 명령을 보내고 데이터를 주고받으며, 운영 체제와 응용 프로그램에 대한 인터페이스도 제공한다.[61] 하드웨어와 운영 체제에 크게 의존하는 프로그램으로, 운영 체제와 응용 프로그램이 하드웨어를 쉽게 사용할 수 있도록 돕는다.[61] 하드웨어의 비동기적인 인터럽트 처리도 장치 드라이버의 역할이다.[61]장치 드라이버의 주된 설계 목표는 추상화이다. 같은 종류의 하드웨어라도 모델에 따라 동작이나 성능이 다를 수 있다. 새로운 기능이나 성능을 가진 하드웨어가 등장하면 기존과 다른 제어 방식을 사용하는 경우가 많다. 운영 체제가 미래의 모든 하드웨어를 제어할 수 있도록 설계하는 것은 어렵기 때문에, 개별 하드웨어 제어는 운영 체제에서 분리해야 한다. 장치 드라이버는 운영 체제와의 인터페이스(함수 호출)를 장치 고유의 처리로 변환하는 기능을 수행한다. 이론적으로 새로운 제어 방식을 가진 하드웨어가 등장하더라도, 해당 하드웨어용 드라이버가 구형 운영 체제에 대응한다면, 구형 운영 체제에서도 드라이버만 교체하여 하드웨어를 제어할 수 있다.[61]
Microsoft Windows Vista 이전의 윈도우나 2.6 버전 이전의 리눅스 커널에서는 드라이버 실행이 협조적이었다. 즉, 드라이버가 무한 루프에 빠지면 시스템 전체가 정지했다. 이후 버전에서는 프리엠프션이 가능해져 커널이 드라이버를 중단시킬 수 있게 되었다.[61]
4. 2. 사용자 인터페이스
사용자 인터페이스(UI)는 사용자가 컴퓨터와 상호 작용할 수 있도록 하는 운영체제의 기능이다. 사용자는 사용자 인터페이스를 통해 프로그램을 직접 제어하고 사용할 수 있다. 사용자 인터페이스는 크게 명령 줄 인터페이스(CLI)와 그래픽 사용자 인터페이스(GUI)로 나뉜다.[61]

- 명령 줄 인터페이스 (CLI): 사용자가 컴퓨터 명령어를 한 줄씩 입력하는 방식이다. MS-DOS와 같은 초기 개인용 컴퓨터 운영체제가 명령 줄 인터페이스를 제공했다.[61]
- 그래픽 사용자 인터페이스 (GUI): 창, 단추, 아이콘 등으로 구성된 시각적 환경을 사용하는 방식이다. 현대 대부분의 컴퓨터 운영체제는 GUI를 지원한다.
4. 2. 1. 그래픽 사용자 인터페이스 (GUI)
현대의 대부분의 컴퓨터 운영체제는 그래픽 사용자 인터페이스(GUI)를 지원한다. 마이크로소프트 윈도우와 맥 OS와 같은 일부 컴퓨터 시스템에서 GUI는 커널에 통합되어 있다.기술적으로 그래픽 사용자 인터페이스는 운영체제의 서비스가 아니지만 운영체제 커널에 통합하면 GUI가 출력 명령을 수행하는 데 필요한 수많은 문맥 교환을 없앰으로써 GUI를 더 반응적으로 만들 수 있다. 다른 운영체제로는 그래픽 하부 시스템을 커널과 운영체제로부터 분리시키는 모듈성이 있다. 1980년대 유닉스에서 VMS 등은 이러한 방식으로 만들어진 운영체제였다. GNU/리눅스 및 맥 OS X 또한 이러한 방식을 취한다. 윈도우 비스타와 같은 현대의 마이크로소프트 윈도우는 거의 사용자 공간에 위치한 그래픽 하부 시스템을 포함하고 있지만 윈도우 NT 4.0과 윈도우 서버 2003 버전 사이의 그래픽 구현 루틴은 거의 커널 공간에 존재한다. 윈도우 9x는 인터페이스와 커널 사이의 구별이 거의 없다.
수많은 컴퓨터 운영체제는 사용자가 원하는 인터페이스를 만들어 설치할 수 있게 하고 있다. X 윈도 시스템을 GNOME이나 KDE와 함께 쓰면 유닉스 및 유닉스 계열 시스템에서 이러한 설정을 할 수 있다. 수많은 윈도우 셸 치환을 통해 마이크로소프트 윈도우에서도 이러한 작업을 수행할 수 있는데, 윈도우 셸을 교체하는 방식을 쓰지만 윈도우로부터 셸 자체를 분리할 수는 없다.
최근 운영 체제는 일반적으로 GUI를 가지고 있다. 많은 독점 시스템(윈도우와 맥 OS)은 커널과 GUI가 밀접하게 관련되어 있다. 다른 운영 체제에서는 사용자 인터페이스가 모듈화되어 있어 임의의 GUI를 설치하거나 새로운 GUI를 만들 수 있다(리눅스, FreeBSD, OpenSolaris).
윈도우는 새로운 버전이 등장할 때마다 GUI를 변경해 왔다. 초기 윈도우부터 윈도우 비스타까지 비교해 보면 그 변화는 크며, 매킨토시의 GUI는 1999년 맥 OS X의 등장으로 극적으로 변화했다.[52]
맥은 초기부터 System 6.0.x까지는 흑백 GUI였고, System 7 이후에도 컬러화된 것만으로, Mac OS 8에서 플래티넘 어피어런스가 채용되어도 Mac OS 9.2.2까지 기본 요소는 거의 변하지 않았다. 그러나 맥 OS X가 되면서 완전히 쇄신되어 Aqua 기반의 GUI가 되었다. Mac OS X v10.3 이후로는 메탈 어피어런스가 도입되었고, 그 이후로도 버전업될 때마다 조금씩 손질되고 있다. 또한 Aqua와 별도로 X11도 제공된다.
맥 OS X의 전신인 NEXTSTEP은 다양한 독창적인 GUI 요소로 알려져 있으며, 다른 운영 체제와 데스크톱 환경에 큰 영향을 주었다. 회색조 시스템이었던 시절부터 알파 채널을 갖추고 있었던 것은 특필할 만한 점이다.
리눅스에서는 GUI를 제공하는 데스크톱 환경이 여러 가지 존재한다. 리눅스에서 사용할 수 있는 GUI로 유명한 것은 GNOME과 KDE가 있다.
4. 3. API와 ABI
운영 체제의 가장 중요한 목적은 응용 프로그램을 실행하는 것이다. 이를 위한 인터페이스가 응용 프로그램 인터페이스(API)와 응용 프로그램 바이너리 인터페이스(ABI)이다. 커널은 시스템 콜을 통해 응용 프로그램에 서비스를 제공한다. 또한 기본 라이브러리를 포함한 형태로 응용 프로그램에 API/ABI를 제공한다. 응용 프로그램에 따라 운영 체제의 미들웨어나 애플리케이션 프레임워크 등을 API로 사용하는 경우도 있다.API는 프로그래밍을 위한 인터페이스이며, 프로그램을 작성할 때의 규칙을 구성한다. 예를 들어, C언어의 함수나 포트란, 파스칼 등의 라이브러리 호출 사양 등이 해당한다.
반면, ABI는 컴파일된 소프트웨어가 운영 체제의 기능을 호출할 때의 인터페이스이며, 프로세스가 동작할 때의 규칙을 구성한다. 예를 들어, 유닉스 계열 운영 체제는 API가 거의 공통적이지만, ABI는 운영 체제에 따라 다르다. 따라서, 같은 CPU를 사용하는 시스템이라도 ABI가 다르면 실행 파일이 다르다. ABI에는 호출 규약, 시스템 콜 방법 등이 포함된다.
참고로, 운영 체제의 경계를 넘는 ABI도 몇 가지 존재한다. 예를 들어, OCMP(Open Computing Environment for MIPS Platform)라는 MIPS 계열 칩을 사용한 유닉스 기반 시스템의 바이너리 공통 인터페이스가 일본전기(NEC), 소니, 스미토모전기공업, 일본 탄덤컴퓨터즈 등에 의해 정의되었고, 그 정의에 따른 유닉스 운영 체제가 여러 개 판매되었다.
5. 종류
운영체제는 사용 목적과 환경에 따라 다양하게 분류된다. 주요 운영체제 종류는 다음과 같다:
- 서버 (서버용): 서버 환경에 특화된 운영체제이다.
- 데스크톱 (PC, 워크스테이션용): 개인용 컴퓨터나 워크스테이션에서 사용되는 운영체제이다.
- 모바일 (PDA, 스마트폰용): PDA나 스마트폰과 같은 모바일 기기에서 사용되는 운영체제이다.
- 임베디드 (임베디드 시스템용): 특정 목적을 위해 기기에 내장되는 운영체제이다.
대부분의 운영체제는 다양한 통신 프로토콜, 하드웨어, 응용 프로그램을 지원한다. 서로 다른 운영체제를 실행하는 컴퓨터들이 네트워크를 통해 자원(연산, 파일, 프린터, 스캐너 등)을 공유할 수 있다. 네트워크는 운영체제가 원격 컴퓨터의 자원에 접근하는 데 필수적이며, 마치 로컬 컴퓨터에 연결된 것처럼 보이게 한다. 일부 네트워크 서비스는 컴퓨터 자원을 투명하게 접근할 수 있게 하는데, 예를 들어 SSH은 네트워크 사용자들에게 컴퓨터 명령 줄 인터페이스에 대한 직접 접근을 허용한다.
5. 1. 싱글태스킹 / 멀티태스킹
싱글 태스킹 운영체제는 한 번에 오직 하나의 프로그램만 실행할 수 있지만, 멀티태스킹 운영체제는 하나 이상의 프로그램이 동시에 실행될 수 있게 한다. 이는 운영체제의 작업 스케줄링 하부 시스템에 의해 제각기 반복적으로 인터럽트 처리되는 여러 프로세스 사이에서 이용 가능한 프로세서 시간을 쪼개는 시분할을 통해 이루어진다.[58] 멀티태스킹에는 선점형과 협동형(비선점형)이 있다. 선점형 멀티태스킹의 경우 운영체제는 CPU 시간을 쪼개어 프로그램들 각각에 슬롯을 할당해준다. 솔라리스, 리눅스, 아미가OS와 같은 유닉스 계열 운영체제들은 선점형 멀티태스킹을 지원한다. 협동형 멀티태스킹은 정해진 방식에 따라 다른 프로세스들에 시간을 제공하기 위해 각 프로세스에 의존함으로써 수행된다. 16비트 버전의 마이크로소프트 윈도우는 협동형 멀티태스킹을 사용하였고, 32비트 버전의 윈도우 NT, 윈도우 9x는 선점형 멀티태스킹을 사용하였다.[58]5. 2. 단일 사용자 / 다중 사용자
단일 사용자 운영체제는 사용자 구별이 없으나 여러 프로그램이 나란히 실행하는 것은 허용한다.[58] 다중 사용자 운영체제는 멀티태스킹의 기본 개념을 확장하여, 디스크 공간과 같은 리소스를 사용자별로 식별하고 관리하는 기능을 제공한다. 이를 통해 여러 사용자가 동시에 시스템과 상호 작용할 수 있다. 시분할 운영체제는 시스템의 효율적인 이용을 위해 태스크를 스케줄링하며, 프로세서 시간, 기억 공간, 인쇄 등 여러 자원을 사용자에게 비용적으로 할당하기 위한 회계 소프트웨어를 포함할 수 있다.5. 3. 분산 운영체제
분산 운영체제는 구별된 컴퓨터 그룹을 관리하고 이들이 마치 하나의 컴퓨터인 것처럼 보이게 만들어 준다. 서로 연결되어 통신하는 네트워크화된 컴퓨터들이 개발되면서 분산 컴퓨팅이 활성화되었다.[59] 분산되는 연산들은 하나 이상의 컴퓨터에서 수행된다. 하나의 그룹에 속하는 컴퓨터들이 협업을 할 때 분산 시스템을 형성하게 된다.[59]다중 처리기에서는 여러 개의 CPU가 메모리를 공유한다. 다중 컴퓨터 또는 클러스터 컴퓨터는 각각 자체 메모리를 가지는 여러 개의 CPU를 갖는다. 대규모 다중 처리기는 설계가 어렵고 비용이 과다하게 많이 들기 때문에 다중 컴퓨터가 개발되었다. 필요한 시스템의 규모 때문에 다중 컴퓨터는 클라우드 컴퓨팅에서 보편적으로 사용된다. 서로 다른 CPU는 종종 서로 메시지를 주고받아야 한다. 성능을 향상시키기 위해 이러한 시스템의 운영 체제는 패킷 복사를 최소화해야 한다. 최신 시스템은 종종 다중 큐(multiqueue)를 사용하여 사용자 그룹을 별도의 우선순위 큐로 분리하여 패킷 복사의 필요성을 줄이고 더 많은 동시 사용자를 지원한다. 또 다른 기술은 원격 직접 메모리 액세스(remote direct memory access)로, 각 CPU가 다른 CPU에 속한 메모리에 접근할 수 있도록 한다. 다중 컴퓨터 운영 체제는 종종 원격 프로시저 호출(remote procedure call)을 지원하여 CPU가 다른 CPU에서 프로시저를 호출할 수 있게 한다. 또는 운영 체제가 가상화를 사용하여 물리적으로 존재하지 않는 공유 메모리를 생성하는 분산 공유 메모리(distributed shared memory)를 사용한다.
분산 시스템은 각각 자체 운영 체제와 파일 시스템을 가질 수 있는 여러 개의 별개의 네트워크로 연결된 컴퓨터 그룹이다. 멀티컴퓨터와 달리 전 세계 어디에나 분산될 수 있다. 운영 체제와 응용 프로그램 사이에 추가적인 소프트웨어 계층인 미들웨어는 일관성을 향상시키는 데 자주 사용된다. 운영 체제와 유사하게 작동하지만 진정한 운영 체제는 아니다.
5. 4. 판형 운영체제
판형 운영체제는 하나의 가상 머신 이미지를 게스트 운영체제로 만들고, 이를 실행 중인 여러 개의 가상 머신을 위한 도구로 저장하는 것을 가리킨다. 이 기법은 가상화와 클라우드 컴퓨팅 관리에 모두 사용되며, 대형 서버 웨어하우스 환경에서 흔히 볼 수 있다.[60]5. 5. 임베디드 운영체제
임베디드 운영체제는 임베디드 컴퓨터 시스템에서 사용하도록 설계되었다. PDA처럼 작은 기기에서 동작하며, 제한된 자원으로 운영된다. 크기가 매우 작고 효율적으로 설계된 것이 특징이다. 임베디드 운영체제의 예로는 윈도우 CE, 미닉스 3이 있다.임베디드 운영 체제는 사물 인터넷(Internet of Things) 객체든 네트워크에 연결되어 있든 상관없이 임베디드 컴퓨터 시스템에서 사용하도록 설계되었다. 임베디드 시스템에는 많은 가정용 기기가 포함된다. 가장 큰 특징은 사용자가 설치한 소프트웨어를 로드하지 않는다는 점이다. 따라서 서로 다른 애플리케이션 간의 보호가 필요하지 않아 설계가 간소화된다. 매우 작은 운영 체제는 10킬로바이트 미만에서 실행될 수 있으며, 가장 작은 것은 스마트 카드용이다. 임베디드 운영체제의 예로는 임베디드 리눅스(Embedded Linux), QNX, VxWorks, 그리고 매우 작은 시스템인 RIOT (operating system) 및 TinyOS가 있다.
5. 6. 실시간 운영체제 (RTOS)
실시간 운영체제(RTOS)는 정해진 기간 안에 수행이 끝나야 하는 응용 프로그램을 위하여 만들어진 멀티태스킹 운영체제이다. (실시간 연산) 이러한 응용 프로그램들에는 조그마한 임베디드 시스템, 자동차 엔진 제어 장치, 산업 로봇, 우주선, 산업 제어 장치, 일부 대형 컴퓨터 시스템 등이 있다.[58]초기의 대형 실시간 운영체제는 이를테면 아메리칸 항공과 IBM이 사브레 항공 예약 시스템을 위하여 개발한 트랜잭션 프로세싱 퍼실리티(TPF)가 있다.
일부 임베디드 시스템은 실시간 연산을 지원하지 않더라도 심비안 OS, 팜 OS, BSD, GNU/리눅스와 같은 운영체제를 이용한다.
실시간 운영 체제는 특정 시점에 이벤트 또는 데이터를 처리하도록 보장하는 운영 체제이다. 하드 실시간 시스템은 정확한 타이밍을 요구하며 제조, 항공 전자 장비, 군사 및 기타 유사한 용도에서 일반적이다. 소프트 실시간 시스템의 경우, 이벤트 처리가 가끔 누락되는 것이 허용되며, 이 범주에는 오디오 또는 멀티미디어 시스템과 스마트폰이 포함되는 경우가 많다. 하드 실시간 시스템이 타이밍에 대해 충분히 정확하려면, 종종 애플리케이션 간에 보호 기능이 없는 라이브러리에 불과하며, eCos가 그 예이다.
5. 7. 라이브러리 운영체제
라이브러리 운영 체제(libOS)는 네트워킹과 같은 일반적인 운영 체제가 제공하는 서비스를 라이브러리 형태로 제공하며, 단일 애플리케이션 및 구성 코드와 결합하여 유니커널을 구성하는 운영 체제이다.[6] 특수화(라이브러리에서 절대적으로 필요한 코드 조각만 추출하여 결합)되고,[7] 단일 주소 공간 머신 이미지는 클라우드 또는 임베디드 환경에 배포될 수 있다.운영 체제 코드와 애플리케이션 코드는 별도의 보호 도메인에서 실행되지 않으며(개념적으로 단일 애플리케이션만 실행되므로 애플리케이션 간의 간섭을 방지할 필요가 없음), OS 서비스는 간단한 라이브러리 호출을 통해 접근된다(컴파일러 임계값에 따라 인라인될 수 있음). 이는 일반적인 컨텍스트 스위칭 오버헤드 없는[8] 임베디드 및 실시간 OS와 유사한 방식이다. 이러한 오버헤드는 무시할 수 없다는 점에 유의해야 한다. 모드 전환의 직접적인 비용 외에도 중요한 프로세서 구조(예: CPU 캐시, 명령어 파이프라인 등)에 간접적인 영향을 미쳐 사용자 모드와 커널 모드 성능 모두에 영향을 미친다.[9]
5. 8. 하이퍼바이저
하이퍼바이저는 가상 머신을 실행하는 운영 체제이다. 가상 머신은 자신이 애플리케이션이라는 것을 인식하지 못하고 마치 자체 하드웨어를 가지고 있는 것처럼 동작한다.[11] 가상 머신은 일시 정지, 저장, 다시 시작이 가능하여 운영 체제 연구, 개발 및 디버깅에 유용하다.[12] 또한 기본 운영 체제와 호환되지 않는 애플리케이션도 컴퓨터에서 실행할 수 있도록 하여 이식성을 향상시킨다.[11]6. 운영체제의 예
운영체제에는 여러 가지 예가 있다. 널리 쓰이는 운영체제로는 마이크로소프트 윈도우, 유닉스 계열 운영체제 등이 있다.
마이크로소프트 윈도우는 개인용 컴퓨터 시장의 약 90%를 점유하고 있는 운영체제이다.[63][64][65] 1985년 MS-DOS의 추가 기능으로 처음 출시되었으며, 윈도우 XP부터는 윈도우 NT 커널을 기반으로 한다.
유닉스 계열 운영체제는 유닉스에서 파생된 운영체제들을 통칭하는 말로, 시스템 V, BSD, GNU/리눅스 등이 여기에 속한다. 이들은 주로 비즈니스 분야의 서버나 학술 및 공학 환경의 워크스테이션에서 사용된다.
6. 1. 유닉스 및 유닉스 계열 운영체제
유닉스는 처음에는 어셈블리어로 작성되었다.[62] 켄 톰프슨은 BCPL에 기반을 둔 B를 작성하였고, 이를 바탕으로 유닉스를 만들었다. 이는 멀틱스 프로젝트에서의 경험을 바탕으로 한 것이다. C는 B를 대체하였으며, 유닉스는 현대의 모든 운영체제에 영향을 미쳤던 크고 복잡한 계열의 상호 관련 운영체제로 발전하였다. (역사 참조)유닉스 계열 운영체제는 유닉스에서 파생되었으며, 시스템 V, BSD, GNU/리눅스와 같은 주된 하부 분류가 있다. 유닉스라는 이름은 오픈 그룹의 상표로, 특정 운영체제에 국한되지 않고 사용할 수 있음을 의미한다. 유닉스 계열은 원래의 유닉스와 유사한 다양한 운영체제를 통칭하는 데 사용된다.
유닉스 계열 운영체제는 다양한 컴퓨터 아키텍처에서 작동한다. 이들은 비즈니스 분야의 서버와 학술 및 공학 환경에서의 워크스테이션에서 주로 사용된다. GNU/리눅스와 BSD와 같은 자유 유닉스들은 이러한 분야에서 널리 쓰인다.
HP의 HP-UX와 IBM의 AIX는 제조업체의 하드웨어에서만 작동하도록 설계되었다. 솔라리스와 같은 운영체제는 x86 서버와 PC를 포함한 여러 종류의 하드웨어에서 작동한다. 애플의 맥 OS X은 하이브리드 커널 기반의 BSD류로, 유닉스 계열이 아니었던 애플의 초기 맥 OS를 대체하였다. 유닉스의 정보 처리 상호 운용성은 POSIX 표준을 확립함으로써 나타난다. POSIX 표준은 다양한 유닉스 계열을 위해 만들어졌지만, 다른 운영체제에도 적용될 수 있다.
BSD에 대한 자세한 내용은 BSD 문서를, macOS에 대한 자세한 내용은 macOS 문서를, 플랜 9에 대한 자세한 내용은 플랜 9 (운영체제) 문서를 참조하라.
6. 1. 1. BSD 및 BSD 계열

BSD는 유닉스 계열의 하부 집합 가운데 하나로, FreeBSD, NetBSD, OpenBSD 등을 포함한다. 이 운영체제들은 웹 서버에서 가장 많이 사용되지만, 개인용 컴퓨터 운영체제로도 활용된다. 인터넷은 BSD와 밀접한 관련이 있는데, 네트워크 연결 및 데이터 송수신에 널리 사용되는 현재 프로토콜의 상당수가 BSD에서 정의되어 널리 쓰이게 된 것이다. 또한, 월드 와이드 웹은 넥스트스텝이라는 BSD 기반 운영체제를 실행하는 여러 컴퓨터에서 처음으로 구현되었다.
BSD는 유닉스에 기반을 두고 있다. 1974년 캘리포니아 대학교 버클리는 최초의 유닉스 시스템을 설치하였다. 시간이 지나면서 컴퓨터 과학부 학생들과 직원들은 문서 편집기와 같은 새로운 프로그램을 추가하기 시작했다. 1978년 버클리 대학교가 최초의 유닉스 시스템이 설치된 새로운 VAX 컴퓨터를 도입했을 때, 대학생들은 컴퓨터 하드웨어의 가능성을 활용하기 위해 유닉스를 수정하였다. 미국 국방부의 방위고등연구계획국은 이에 관심을 갖고 프로젝트에 투자하기로 결정하였다. 많은 학교, 회사, 정부 기관들이 이를 인지하고 AT&T에서 제공하는 공식 버전이 아닌 버클리 버전의 유닉스를 사용하기 시작했다. 1985년 스티브 잡스는 애플에서 퇴사한 후 NeXT사를 설립하여 넥스트스텝이라는 BSD 기반의 고성능 컴퓨터를 제조하였다. 이 컴퓨터들 중 하나는 팀 버너스 리가 최초의 웹 서버로 월드 와이드 웹을 만드는 데 사용되었다.
6. 1. 2. OS X (macOS)
맥 OS X은 애플이 개발하여 판매한 사유 그래픽 운영체제이다. 매킨토시 컴퓨터에 최신으로 설치되어 있으며, 1984년 이후 애플의 사유 운영체제였던 맥 OS의 뒤를 잇는다. 전작과 달리 맥 OS X은 유닉스 운영체제로, 1980년대 2/4 분기부터 애플이 1987년 초에 인수한 NeXT에서 개발한 기술을 기반으로 한다.이 운영체제는 1999년에 맥 OS X 서버 1.0이라는 이름으로 처음 출시되었으며, 그 뒤 2001년 3월에 데스크톱 지향 버전인 맥 OS X v10.0을 출시하였다. 이후 맥 OS X의 "클라이언트", "서버" 에디션 여섯 가지가 공개되었으며, 최신 제품은 2020년에 출시된 OS X 빅서이다.
맥 OS X 서버는 서버 에디션으로, 구조적으로 데스크톱 버전과 비슷하지만 일반적으로 애플의 매킨토시 서버 하드웨어에서 실행된다. 맥 OS X은 메일 전송 에이전트, 삼바, LDAP 서버, DNS 등을 비롯한 네트워크 서비스에 접근할 수 있게 하는 워크 그룹 관리 및 관리 소프트웨어 도구를 포함하고 있다.[59]
6. 1. 3. 플랜 9
벨 연구소에서 개발한 분산 운영체제이다. 유닉스의 후속으로 설계되었으며, 네트워크 기능을 강화하고 그래픽을 내장했다.6. 2. 리눅스와 GNU

리눅스는 BSD 및 그 변종과 달리 실제 유닉스 코드 없이 개발된 유닉스 계열 운영체제이다. 슈퍼컴퓨터에서부터 손목시계에 이르기까지 다양한 기기에 쓰인다.[43] 리눅스 커널은 오픈 소스 라이선스로 배포되므로 누구나 코드를 읽고 수정할 수 있다.
GNU 프로젝트는 유닉스와 비슷하게 완전하게 자유롭고 열려 있는 운영체제를 만드는 것을 목표로 리처드 스톨만이 1983년에 시작하였다. 이 프로젝트는 리눅스의 수많은 부분에 기여했으며, 이 때문에 리눅스는 GNU/리눅스로 불리기도 한다. GNU 일반 공중 사용 허가서 하에 배포되는 리눅스 커널은 핀란드 대학생 리누스 토르발스의 부차적인 프로젝트로 시작되었다. 1991년 토르발스는 이 작업에 착수하여 프로젝트에 대한 정보를 컴퓨터 학생과 프로그래머를 위한 뉴스그룹에 게시하였다.[43]
리눅스는 GNU 일반 공중 사용 허가서(GPL)에 따라 배포되는 자유 소프트웨어이며, 모든 파생 제품은 소스 코드를 공개해야 한다. 프로그래머들이 자체 사용을 위해 설계했으므로, 거의 무한한 방식으로 결합할 수 있는 소수의 기본 요소를 사용하여 단순성과 일관성을 강조한다.
마이크로커널을 사용하지 않는 다른 유닉스 시스템과 유사하게 설계되었으며, C로 작성되었다.[43] 유닉스 시스템 V 구문을 사용하지만 BSD 구문도 지원한다. 표준 유닉스 네트워킹 기능과 유닉스 도구의 전체 모음을 지원하며, 다중 사용자를 지원하고 선점형 멀티태스킹을 사용한다. 처음에는 최소한의 설계였지만, 16MB 미만의 RAM에서도 작동할 수 있는 유연한 시스템이며, 대규모 다중 프로세서 시스템에서도 사용된다. 리눅스 배포판은 커널, 시스템 라이브러리, 시스템 유틸리티로 구성된다. 그래픽 사용자 인터페이스(GUI)와 명령줄 인터페이스를 모두 지원한다.
안드로이드는 리눅스를 기반으로 한 부분적으로 오픈 소스인 운영 체제이며, 스마트폰과 스마트워치, 자동차 대시보드, 비행기 좌석 등받이, 의료 기기, 가전제품 등 GUI가 필요한 임베디드 시스템에서 널리 사용된다. 리눅스와 달리 안드로이드의 상당 부분은 자바로 작성되었고 객체 지향 설계를 사용한다.
6. 2. 1. 구글 크롬 OS
구글이 리눅스 커널을 기반으로 설계한 운영체제이다. 크롬은 대부분의 시간을 인터넷으로 보내는 이용자들을 대상으로 하며, 기술적으로는 어떠한 응용 프로그램도 없는 웹 브라우저만을 이용한다. 문서 작성이나 미디어 보기와 같은 작업은 웹 브라우저에 쓰이는 인터넷 애플리케이션에 의존한다.[43]6. 3. 마이크로소프트 윈도우
마이크로소프트 윈도우는 개인용 컴퓨터 시장에서 가장 많이 사용되는 사유 운영체제 계열이다. 개인용 컴퓨터 운영체제 시장의 약 90%를 점유하고 있다.[63][64][65] 최신 버전은 개인용 컴퓨터의 경우 윈도우 11, 서버의 경우 윈도우 서버 2019이다.MS-DOS에 추가 기능으로 나온 것이 기원이며, 1985년 마이크로소프트는 개인용 컴퓨터 비즈니스 분야를 지배하며 여러 산업 표준을 정립했다. 윈도우 XP부터 모든 윈도우 버전은 윈도우 NT 커널을 기반으로 한다. 현재 윈도우 버전은 IA-32와 x86-64 프로세서에서 동작하지만 이전 버전들은 다른 아키텍처도 지원했다.
1994년에는 32비트에 본격 대응하고 강력한 멀티태스킹 기능을 갖춘 마이크로소프트 윈도우 NT가 등장했다. 그러나 개인용으로는 널리 보급되지 않았고, 대신 윈도우 95가 널리 보급되었다. 이후 윈도우 NT 계열과 윈도우 9x 계열이 병존하였고, 윈도우가 윈도우 NT 기반으로 통합된 것은 2001년 윈도우 XP부터이다.
6. 4. 기타 운영체제
OS/2는 IBM과 마이크로소프트가 개발한 운영체제로, 현재는 특정 분야에서 사용되고 있다. BeOS는 맥 OS에서 유닉스를 사용하기 이전의 운영체제이며, XTS-300과 함께 틈새 시장을 공략했다. RISC OS, MorphOS, 아미가OS 4는 열성적인 커뮤니티와 전문 분야를 위한 소수 플랫폼으로 개발이 계속되고 있다. DEC의 OpenVMS는 휴렛 패커드가 계속 개발을 진행하고 있다.도스와 같은 오래된 운영체제도 FreeDOS 등의 프로젝트를 통해 명맥을 유지하고 있다. 그 밖에도 운영체제 교육, 학술, 운영체제 개념 연구 등을 위해 예외적으로 사용되는 운영체제들이 있다. 학술 및 연구 목적으로 사용되는 시스템의 예로는 미닉스가 있으며, 순수 연구 목적으로는 싱귤래러티가 있다.
7. 구성 요소
운영체제는 여러 부분으로 구성된다. 가장 중요한 요소 중 하나는 커널이다. 커널은 일반인이 직접 볼 수 없는 낮은 수준의 프로세스를 제어한다. 메모리 읽기/쓰기, 프로세스 실행, 모니터, 키보드, 마우스와 같은 장치를 통한 정보 교환, 네트워크를 통해 받은 정보 해석 등을 담당한다.
펌웨어와 장치 드라이버의 도움으로 커널은 모든 컴퓨터 하드웨어 장치에 대한 가장 기본적인 제어를 제공한다. 커널은 램을 통한 프로그램의 메모리 접근을 관리하고, 어느 프로그램이 어느 하드웨어 자원에 접근할지를 결정하며, CPU 동작 상태를 늘 최적으로 설정 및 초기화하고, 디스크, 테이프, 플래시 메모리와 같은 매체의 파일 시스템을 갖춘 장시간 비휘발성 기억 장치의 데이터를 정리한다. 운영체제 내 커널의 영역과 구성에 따라 모노리딕 커널, 마이크로 커널 등으로 분류한다.
사용자 인터페이스는 사용자가 직접 프로그램을 제어하고 사용할 수 있게 하는 운영체제의 기능이다. 사용자 인터페이스는 아이콘과 바탕 화면을 지닌 그래픽이나 명령 줄을 지닌 문자 형태일 수 있다.
API는 응용 프로그램이 다른 프로그램과 상호 작용할 수 있게 하는 서비스와 코드 라이브러리의 집합이며, 운영체제 자체라고 할 수 있다.
운영체제에 따라 이러한 구성 요소 중 일부가 실질적인 부분으로 취급되지 않을 수 있다. 예를 들어 윈도우는 사용자 인터페이스를 운영체제의 일부로 간주하지만, 리눅스는 그렇지 않다.
운영체제는 응용 프로그램과 하드웨어 사이의 인터페이스 역할을 한다. 운영체제는 응용 프로그램 개발을 단순하게 하는 서비스 집합이다. 프로그램을 실행하면 운영체제가 프로세스를 만든다.[66] 커널은 메모리와 다른 자원을 할당하여 프로세스를 만들고, 멀티태스킹 환경에서 프로세스의 우선순위를 정하며, 메모리에 프로그램 코드를 적재하고 프로그램을 실행한다. 프로그램은 사용자와 장치와 상호작용하며 원하는 명령을 수행한다.
운영체제는 프로세스를 생성, 삭제, 중단, 재개하고, 프로세스 간 동기화와 통신, 교착 상태 처리 메커니즘을 제공한다.
운영 체제의 구성 요소는 컴퓨터의 다양한 부분이 조화롭게 작동하도록 설계되었다. 모든 사용자 소프트웨어는 하드웨어에 접근하기 위해 운영체제와 상호 작용해야 한다.
8. 보안
컴퓨터 보안은 여러 기술이 올바르게 작동하는지에 달려 있다. 운영체제는 보안을 위해 특정 환경에 대한 권한을 사용자나 프로그램에 개별적으로 설정하고 인증 프로세스를 제공한다. 특히 여러 사용자가 사용하는 시스템에 인터넷 보안은 중요하다. 시스템을 사용하는 각 사용자는 개인 파일을 다른 사용자가 읽을 수 없게 할 수 있다.[59]
보안은 사용자를 동일한 컴퓨터의 다른 사용자뿐만 아니라 네트워크를 통해 원격으로 접근하려는 사용자로부터 보호하는 것을 의미한다. 운영 체제 보안은 CIA 삼각형인 기밀성(무단 사용자가 데이터에 접근할 수 없음), 무결성(무단 사용자가 데이터를 수정할 수 없음), 가용성(서비스 거부 공격 발생 시에도 시스템이 승인된 사용자에게 계속 사용 가능하도록 보장)을 달성하는 데 달려 있다.
운영체제에서 커널, 프로세스, 가상 머신과 같이 보안 도메인을 격리하는 것이 보안을 달성하는 데 중요하다. 보안을 강화하는 다른 방법으로는 공격 표면을 최소화하기 위한 단순화, 기본적으로 리소스에 대한 액세스 잠금, 모든 요청에 대한 권한 확인, 최소 권한 원칙(작업 수행에 필요한 최소 권한 부여), 권한 분리, 공유 데이터 감소 등이 있다.
일부 운영 체제 설계는 다른 설계보다 더 안전하다. 커널과 애플리케이션 간에 격리가 없는 운영 체제가 가장 안전하지 않으며, 대부분의 범용 운영 체제와 같은 모놀리식 커널을 사용하는 운영 체제는 커널의 일부가 손상되면 여전히 취약하다. 더 안전한 설계는 커널의 권한을 여러 개의 별도 보안 도메인으로 분리하고 단일 커널 위반의 결과를 줄이는 마이크로커널을 특징으로 한다. 유니커널은 커널을 최소화하고 애플리케이션별로 다른 운영 체제 기능을 분리하여 보안을 향상시키는 또 다른 방법이다.
대부분의 운영 체제는 C 또는 C++로 작성되며, 이는 악용 가능한 잠재적인 취약성을 만든다. 이를 방지하려는 시도에도 불구하고, 범위 확인이 없기 때문에 가능해지는 버퍼 오버플로 공격으로 인해 취약성이 발생한다. 일부는 CPU 최적화로 인한 하드웨어 취약성을 사용하여 운영 체제를 손상시킬 수도 있다. 백도어와 같이 운영 체제 프로그래머가 의도적으로 취약성을 심어놓은 사례가 있다.
운영 체제는 처리해야 하는 요청과 처리해서는 안 되는 요청을 구분할 수 있어야 한다. 일부 시스템은 단순히 사용자 이름 등으로 요청자를 식별하고, 그것으로 권한의 유무를 판단한다. 요청자를 식별하는 과정을 "인증"이라고 부른다. 대부분 사용자 이름을 제시해야 하며, 사용자 이름에 이어 비밀번호가 필요한 경우도 있다. 다른 인증 방법으로 자기 스트라이프 카드나 지문을 사용한 인증을 실시하는 경우도 있다.
더욱 고도의 보안 기능을 갖춘 시스템에서는 감사 추적 옵션도 제공한다. 이것은 자원에 대한 접근 요청을 감시하고 기록하는 것이다. 프로그램이 어떤 자원을 요청하면 인터럽트에 의해 커널로 제어가 넘어가므로, 거기서 보안 확인이 가능하다.
8. 1. 네트워킹
현대 대부분의 운영체제는 다양한 통신 프로토콜, 하드웨어, 응용 프로그램을 지원한다. 서로 비슷하지 않은 운영체제를 실행하는 컴퓨터가 유무선 연결을 이용한 연산, 파일, 프린터, 스캐너 같은 자원을 공유하기 위해 같은 망에 참여할 수 있다.[59] 네트워크는 컴퓨터의 운영체제가 원격 컴퓨터의 자원에 접근하는 데 필수적이다. 마치 리소스가 로컬 컴퓨터에 바로 연결되어 있는 것처럼 보이게 만들어 준다. 여기에는 컴퓨터의 그래픽, 사운드 하드웨어를 공유하거나 네트워킹 파일 시스템을 이용하는 등 단순한 통신에서 나오는 모든 것을 포함한다. 일부 네트워크 서비스는 컴퓨터의 자원을 투명하게 접근할 수 있게 한다. 이를테면 SSH는 네트워크로 이어진 사용자들이 컴퓨터의 명령 줄 인터페이스에 직접 접근할 수 있게 한다.[59]많은 운영 체제는 TCP/IP(Transmission Control Protocol/Internet Protocol)을 지원한다. 역사적으로 초기 컴퓨터 네트워크는 모뎀을 사용한 전화 회선을 통해 이루어졌다(BSC 절차 등). 그 후 패킷 통신이 사용되기 시작했고, IBM의 SNA와 같은 각 회사 고유의 네트워크 아키텍처가 등장했다. 현재는 TCP/IP를 중심으로 한 통신이 주류이다.[59]
통신 프로토콜은 전송 계층까지는 커널 내부 모듈로 구현되고, 표현 계층 이상은 시스템 프로세스로 구현되는 것이 일반적이다. 세션 계층의 구현은 시스템에 따라 다르다.[59]
이러한 네트워크 기능을 통해 서로 다른 운영 체제 간에 네트워크를 형성하여, 연산 능력(RPC), 파일, 프린터, 스캐너 등의 자원을 공유할 수 있다. 네트워크를 통해 어떤 컴퓨터의 운영 체제가 원격 컴퓨터에 있는 자원을 마치 자신에게 직접 연결된 것처럼 투명하게 이용할 수 있다. 단순한 통신에서 시작하여 분산 파일 시스템, 그래픽이나 사운드와 같은 기능의 공유까지 다양한 응용이 있다. 투명한 접근의 예로는 SSH를 이용한 명령줄의 직접 사용 등이 있다.[59]
9. 취미 활동을 통한 운영체제 개발
운영체제 개발은 컴퓨팅에 취미를 둔 사람들이 관여하는 가장 복잡한 활동들 가운데 하나이다. 취미로 만드는 운영체제는 기존의 운영체제로부터 직접적으로 코드를 가져오지 않은 것으로 분류될 수 있으므로, 사용자들과 활동 개발자들의 수는 적은 편이다.[67]
어떤 경우에는 취미 개발이 홈브루 컴퓨팅 장치, 예를 들어 6502 마이크로프로세서로 구동되는 단순한 단일 보드 컴퓨터를 지원하기 위한 것일 수도 있고, 이미 널리 사용되고 있는 아키텍처를 위한 개발일 수도 있다. 운영체제 개발은 완전히 새로운 개념에서 비롯되거나 기존 운영체제를 모델링하여 시작될 수 있다. 어느 경우든 취미 개발자는 자신이 개발자이거나, 같은 관심사를 가진 소규모의 때로는 구조화되지 않은 개인 그룹과 상호 작용할 수 있다.
취미로 개발하는 운영체제의 예로는 ReactOS, 실라블, 템플OS가 있다.[40]
10. 시장 점유율
운영체제 | 2012년 (단위: 100만 기기) | 2013년 (단위: 100만 기기) |
---|---|---|
안드로이드 | 504 | 878 |
윈도우 | 346 | 328 |
iOS/macOS | 214 | 267 |
블랙베리 | 35 | 24 |
기타 | 1,117 | 803 |
전체 | 2,216 | 2,300 |
출처: 가트너
리눅스 재단에 따르면 퍼블릭 클라우드 워크로드의 90%, 세계 스마트폰의 82%, 임베디드 기기의 62%, 슈퍼 컴퓨터 시장의 99%가 리눅스로 작동한다.[69]
11. 범위 및 논란
운영체제는 잘 정의된 인터페이스를 가지므로 운영체제와 응용 프로그램 간의 구분은 명확하지만, 어느 정도의 서비스를 운영체제 안에 포함시켜야 하는가에 대한 문제는 기술적인 문제일 뿐만 아니라 사업적인 문제이기도 하다. 이 문제는 1998년 미국 법무부가 마이크로소프트에 대해 소송을 제기한 것에서 분명히 드러난다. 미국 법무부는 마이크로소프트가 운영체제에 너무 많은 기능을 포함시켜 응용 프로그램 제작 업체들에게 피해를 주었다고 주장했다.
참조
[1]
서적
Operating Systems, Internals and Design Principles
Prentice Hall
[2]
서적
Operating Systems.
Technical Publications
[3]
웹사이트
Operating System Market Share Worldwide
https://gs.statcount[...]
2024-12-20
[4]
웹사이트
VII. Special-Purpose Systems - Operating System Concepts, Seventh Edition [Book]
https://www.oreilly.[...]
2021-02-08
[5]
웹사이트
Special-Purpose Operating Systems - RWTH AACHEN UNIVERSITY Institute for Automation of Complex Power Systems - English
https://www.acs.eone[...]
2021-02-08
[6]
간행물
Unikernels: Rise of the Virtual Library Operating System: What if all the software layers in a virtual appliance were compiled within the same safe, high-level language framework?
https://doi.org/10.1[...]
ACM
2024-08-07
[7]
웹사이트
Build Process - Unikraft
https://unikraft.org[...]
2024-08-08
[8]
웹사이트
Leave your OS at home: the rise of library operating systems
https://www.sigarch.[...]
ACM SIGARCH
2017-09-14
[9]
학회
FlexSC: Flexible System Call Scheduling with Exception-Less System Calls
https://www.usenix.o[...]
USENIX
2010-10-04
[10]
서적
Operating Systems: Three Easy Pieces
http://pages.cs.wisc[...]
2016-07-25
[11]
서적
The Linux Programming Interface
No Starch Press
[12]
서적
The Art Of Assembly Language Programming
No Starch Press
1996-00-00
[13]
서적
Structured Computer Organization, Third Edition
https://archive.org/[...]
Prentice Hall
[14]
서적
Operating System Concepts, Fourth Edition
Addison-Wesley
[15]
서적
Operating System Concepts, Fourth Edition
Addison-Wesley
[16]
서적
Operating System Concepts, Fourth Edition
Addison-Wesley
[17]
서적
Operating System Concepts, Fourth Edition
Addison-Wesley
[18]
서적
The Linux Programming Interface
No Starch Press
[19]
서적
The Linux Programming Interface
No Starch Press
[20]
서적
The Linux Programming Interface
No Starch Press
[21]
웹사이트
Intel® 64 and IA-32 Architectures Software Developer's Manual
https://www.intel.co[...]
Intel Corporation
2016-09-00
[22]
서적
The Design of the UNIX Operating System
Prentice-Hall
[23]
서적
The Linux Programming Interface
No Starch Press
[24]
서적
Structured Computer Organization, Third Edition
https://archive.org/[...]
Prentice Hall
[25]
서적
Operating System Concepts, Fourth Edition
Addison-Wesley
[26]
서적
UNIX System Programming
Addison-Wesley Publishing Company
[27]
서적
UNIX System Programming
Addison-Wesley Publishing Company
[28]
서적
UNIX System Programming
Addison-Wesley Publishing Company
[29]
서적
Structured Computer Organization, Third Edition
https://archive.org/[...]
Prentice Hall
[30]
서적
IBM System/360 Principles of Operation
http://bitsavers.org[...]
2022-04-13
[31]
서적
Structured Computer Organization, Third Edition
https://archive.org/[...]
Prentice Hall
[32]
서적
Users Handbook - PDP-7
http://bitsavers.org[...]
Digital Equipment Corporation
2022-04-20
[33]
서적
PDP-1 Input-Output Systems Manual
http://bitsavers.org[...]
Digital Equipment Corporation
2022-08-16
[34]
서적
Operating System Concepts, Fourth Edition
Addison-Wesley
[35]
서적
Operating System Concepts, Fourth Edition
Addison-Wesley
[36]
서적
Structured Computer Organization, Third Edition
https://archive.org/[...]
Prentice Hall
[37]
서적
Structured Computer Organization, Third Edition
https://archive.org/[...]
Prentice Hall
[38]
서적
Structured Computer Organization, Third Edition
https://archive.org/[...]
Prentice Hall
[39]
서적
Computer Organization & Architecture
Prentice-Hall of India Private Limited
[40]
웹사이트
My OS Is Less Hobby than Yours
https://www.osnews.c[...]
2009-12-20
[41]
웹사이트
Desktop Operating System Market Share Worldwide
https://gs.statcount[...]
2023-10-03
[42]
웹사이트
Mobile & Tablet Operating System Market Share Worldwide
https://gs.statcount[...]
2023-10-02
[43]
뉴스
Linus Torvalds prepares to move the Linux kernel to modern C
https://www.zdnet.co[...]
2022-02-07
[44]
웹사이트
https://gs.statcount[...]
[45]
웹사이트
https://gs.statcount[...]
[46]
문서
Usage share of operating systems#Supercomputers
[47]
웹사이트
組み込みOSのAPIはTRON系OSがシェア60%、24年連続トップ
https://monoist.itme[...]
[48]
서적
Operating Systems, Internals and Design Principles
Prentice Hall
[49]
서적
Operating Systems.
Technical Publications
[50]
서적
Computer Organization & Architecture
Prentice-Hall of India Private Limited
[51]
웹사이트
Extended FAT File System
http://msdn2.microso[...]
2007-10-20
[52]
웹사이트
Chronology of Personal Computer Software
http://www.islandnet[...]
2008-05-07
[53]
서적
Classic Operating Systems
https://books.google[...]
Springer
[54]
웹사이트
組込みシステムに組み込んだOSのAPIで TRON系OSが60%のシェアを達成し24年連続の利用実績トップ 2020年4月2日
https://www.tron.org[...]
トロンフォーラム
2020-09-22
[55]
서적
[56]
서적
[57]
웹사이트
Operating system market share
http://marketshare.h[...]
[58]
논문
Reducing processor power consumption by improving processor time management in a single-user operating system
ACM
[59]
논문
International Conference on Parallel, Distributed and Grid Computing (PDGC)
[60]
서적
Operating Systems Concepts
Wiley
[61]
서적
[62]
웹사이트
Unix Manual, first edition
http://cm.bell-labs.[...]
Lucent Technologies
2012-11-22
[63]
웹사이트
W3Counter - Global Web Stats
http://www.w3counter[...]
[64]
웹사이트
Operating system market share
http://marketshare.h[...]
[65]
웹사이트
http://gs.statcounte[...]
[66]
문서
어떠한 프로그램 파일들이 준비 상태나 대기 상태로 실행되기 전에 적재되는 것
[67]
웹사이트
My OS is less hobby than yours
http://www.osnews.co[...]
2009-12-21
[68]
웹사이트
Android device shipments to top 1 billion this year -- Gartner
http://news.cnet.com[...]
2014-01-07
[69]
뉴스
컴퓨팅세계 평정한 '리눅스'...커뮤니티도 살아있네
http://m.zdnet.co.kr[...]
2017-10-30
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com