실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램
자원 관리
➡ 운영체제는 컴퓨터 자원을 응용 프로그램에게 나눠주어 사용자가 원활하게 작업할 수 있도록 돕는다.
효율성
➡ 운영체제는 같은 자원을 관리하더라도 효율적으로 관리해야한다. 즉 같은 자원을 사용하여 더 많은 작업량을 처리하거나, 같은 작업량을 처리하는데 보다 적은 자원을 사용하는 것을 목표로 갖는다.
자원 보호
➡ 운영체제는 악의적인 사용자나 미숙한 사용자로부터 자원을 보호해야하는데, 이러한 비정상적인 작업으로부터 컴퓨터 자원을 지키는 역할을 한다.
안정성
➡ 운영체제가 안전하려면 사용자와 응용 프로그램의 안전 문제와 하드웨어적인 보안문제를 처리할 수 있어야하며, 시스템에 문제가 발생했을 때 이전으로 복구하는 결함 포용기능을 수행해야 한다.
하드웨어 인터페이서 제공
➡ 우리는 다양한 종류의 하드웨어를 사용하는데 운영체제는 복잡한 과정없이 다양한 장치를 사용할 수 있도록 해주는 하드웨어 인터페이스를 제공한다.
확장성
➡ 운영체제는 하드웨어의 종류와 상관없이 꽂으면 바로 실행할 수 있는 플러그 앤드 플레이 기능을 제공해야하며, 앞으로 개발될 하드웨도 제약 없이 사용할 수 있도록 확장성을 보장해야 한다.
사용자 인터페이스 제공
➡ 사용자 인터페이스는 사용자가 운영체제를 편리하게 사용하도록 지원하기 위한 것이다. 대표적인 예시로 과거에는 유닉스,MS-DOS와 같은 운영체제로 작업할 때 마우스 없이 키보드로만 사용했기 때문에 여러모로 불편했지만 지금은 그래픽 사용자 인터페이스(GUI)를 제공하므로 대부분의 작업을 마우스로 수행할 수 있게되면서 운영체제 사용이 편리해졌다.
편리성
➡운영체제는 응용 프로그램과 사용자에게 다양한 편리성을 제공한다.
최초의 컴퓨터인 에니악은 존 모클리와 존에커트가 만들었다. 백열전구 같은 모양의 진공관이라는 소자를 사용하여 진공관이 켜지면 1, 꺼지면 0이라고 판단했는데, 이는 컴퓨터가 2진법을 사용하는 계기가 되었고 초창기 컴퓨터에는 운영체제가 없었다.
일괄 작업 시스템(Batch job System)
에서는 작업에 필요한 프로그램과 데이터를 동시에 입력해야하고, 프로그램 실행 중간에 사용자가 데이터를 입력하거나 수정하는 것이 불가능하다.
일괄 작업 시스템은 운영체제가 사용되었다.
키보드와 모니터가 개발됨으로써 작업 중간에 사용자가 입력을 하거나 사용자에게 중간 결과값을 보여줄 수 있게 되었고, 프로그램이 진행되는 도중에 사용자로부터 입력을 받을 수 있어 입력값에 따라 작업의 흐름을 바꾸는 것도 가능해졌다. 이러한 시스템은 컴퓨터와 사용자의 대화를 통해 작업이 이루어지므로 대화형 시스템(interactive system)
이라고 일컫는다.
대화형 시스템의 등장으로 다양한 종류의 응용 프로그램을 만들 수 있게 되었지만, 일괄 작업 시스템은 입출력이 거의 없어 작업 시간을 예측할 수 있는 반면에 대화형 시스템의 경우 작업 시간을 예측하기 어렵다.
1960년대 후반에는 값비싼 기계로 한 번에 하나의 작업만 수행하는 것은 낭비라 생각하여 하나의 CPU로 여러 작업을 동시에 실행하는 기술인 다중 프로그래밍(multiprogramming)
이 개발되었다.
다중 프로그래밍은 CPU사용 시간을 아주 잘게 쪼개어 여러 작업에 나누어 주는데, 이처럼 여러 작업을 조금씩 처리하여 작업이 동시에 이루어지는 것처럼 보이게 하는것을 시분할 시스템(time sharing system)
이라고 한다.
시분할 시스템은 모든 작업이 동시에 처리되는 것처럼 보이는 장점이 있지만 단점으로는 여러 작업을 동시에 처리하기 위한 추가 작업이 필요하는 점이 있다. 또한 시스템 내에 많은 양의 작업이 공존할 경우, 중요한 작업이 일정 시간안에 끝나는 것을 보장하지 못한다.
이러한 문제점을 보안하기 위한 시스템으로 특정 시스템에서 일정 시간안에 작업이 처리되도록 보장하는 실시간 시스템(real-time system)
이 있다.
시분할 시스템은 하나의 컴퓨터에서 여러 명이 작업할 수 있는 다중 사용자 시스템(multi-user system)
을 가능하게 했다. 대표적인 예시로는 다중 프로그래밍과 다중 사용자를 지원하는 운영체제인 유닉스가 있다.
1970년대에 개인용 컴퓨터와 인터넷이 보급되면서 값이 싸고 크기가 작은 컴퓨터들을 하나로 묶어 대형 컴퓨터에 버금가는 시스템을 만들게 되었는데 이름 분산 시스템(distributed system)
이라고 한다. 분산 시스템은 네트워크상에 분산되어 있는 여러 컴퓨터로 작업을 처리하고 그 결과를 상호 교환하도록 구성한 시스템이다.
클라이언트/서버 시스템(client/server system)
은 모든 컴퓨터의 지위가 동일한 분산 시스템과 달리 작업을 요청하는 클라이언트와 거기에 응답하여 요청받은 작업을 처리하는 서버의 이중구조로 나뉜다.
문제점으로는 서버 과부하를 꼽을 수 있는데, 모든 요청이 서버로 집중되기 때문에 많은 클라이언트를 처리하기 위해서는 많은 서버와 큰 용량의 네트워크가 필요하다.
서버의 부하를 줄일 수 있는 새로운 시스템으로 P2P 시스템(Peer-to-Peer system)
이 만들어졌다. 서버를 거치지 않고 사용자와 사용자를 직접 연결하며 대표적인 예시로는 메신저와 파일공유
가 있다
2000년대 초반에는 P2P 컴퓨팅 환경과 더불어 그리드 컴퓨팅, 클라우드 컴퓨팅, 사물 인터넷 등의 새로운 컴퓨팅 환경이 탄생했다.
<이미지 출처>
https://ko.wikipedia.org/wiki/%EC%BB%A4%EB%84%90_%28%EC%BB%B4%ED%93%A8%ED%8C%85%29
커널
은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 담당하는 부분이다.
이중모드(dual mode)
란?
CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다.
사용자 모드(user mode)
는 커널 영역의 코드를 실행할 수 없는 모드이다. 사용자 모드로 실행 중인 CPU는 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없기 때문에 사용자 모드로 실행되는 일반적인 응용 프로그램은 자원에 접근할 수 없다.
커널 모드(kernel mode)
는 커널 영역의 코드를 실행할 수 있는 모드이다. CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있다. 운영체제는 커널 모드로 실행되기 때문에 자원에 접근할 수 있다.
시스템 호출(system call)
이란?
사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받기 위한 요청 즉, 운영체제 서비스를 제공받기 위해 커널 모드로 전환하는 방법이다.
❗시스템 호출 작동 순서❗
1. 시스템 호출을 발생시키는 명령어 실행
2. CPU -> 지금까지의 작업 백업
3. 커널 영역 내에 시스템 호출을 수행하는 코드 실행
4. 기존에 실행하던 응용프로그램으로 복귀
시스템 호출은 소프트웨어적인 인터럽트이다. 인터럽트는 입출력장치에 의해 발생하기도 하지만 인터럽트를 발생시키는 특정 명령어에 의해 발생하는 데, 이를 소프트웨어 인터럽트
라고 한다.
⬇⬇⬇ 인터럽트에 대한 자세한 내용은 아래 블로그 글을 참고하자.