Operating System Concept 9th 를 기반으로 운영체제 내용을 정리하기로 한다.
추가로 inflearn에서 <운영체제 공룡책 강의>를 수강하였다.
운영체제는 컴퓨터 하드웨어를 관리하는 프로그램이다.
운영체제는 응용 프로그램을 위한 기반을 제공한다.
운영체제는 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중재자 역할을 수행한다.
대형 컴퓨터
의 운영체제는 주로 하드웨어의 이용을 최적화하는 데 중점을 둔다.
개인용 컴퓨터
에서는 복잡한 게임, 비즈니스 등 어플리케이션 지원에 중점을 둔다.
휴대용 컴퓨터
운영체제는 사용자가 컴퓨터와 쉽게 interface 할 수 있는 환경을 제공하는 데 중점을 둔다.
정리 : 운영체제의 종류와 목적에 따라 편리성, 효율성 등 다양한 기준에 따라 설계되었다.
사용의 용의성
을 위해 설계됨자원의 이용
을 극대화하도록 설계되어 있어 CPU 시간, 메모리 등이 효율적으로 사용된다.사용의 용이성
과 자원의 이용
이 조화를 이루도록 설계된다.제어 프로그램(Control Program)
으로, 입출력 장치의 제어와 작동에 깊이 관여한다. 운영체제
이다. 현대의 일반적인 컴퓨터 시스템은 여러개의 CPU와 장치 컨트롤러로 구성되어 있다. 그리고 이들은 Common Bus로 이어져 메모리를 공유한다.
컴퓨터가 구동을 시작할 때, 수행할 초기 프로그램으로 부트스트랩(BootStrap) 프로그램이 있다.
보통 펌웨어(firmware)라고 알려져 있는 컴퓨터 내의 ROM(Read-Only Memory)이나 EEPROM(Electrically Erasable Programmable Read-Only Memory)에 저장된다.
CPU 레지스터로부터 장치 제어기, 메모리 내용 등을 포함한 시스템의 모든 면을 초기화한다.
이 프로그램은 운영체제를 적재하는 방법 및 수행을 시작하는 방법을 알아야 한다.
이 목적을 달성하기 위해 BootStrap Program은 운영체제의 커널을 찾아 메모리에 적재해야 한다.
UNIX에서는 첫 시스템 프로세스가 'init'이며, 이 단계가 끝나면 시스템이 완전히 부트 된 상태이다. 이후 시스템은 무슨 사건(event)이 발생하기를 기다린다.
사건이 발생하면, Hardware 또는 Software로부터 발생한 인터럽트에 의해 신호가 보내진다.
Hardware는 어느 순간이든 System Bus를 통해 CPU에 신호를 보내고, 인터럽트를 발생시킬 수 있다.
Software는 System Call 이라 불리는 특별한 연산을 통해 인터럽트를 발생시킬 수 있다.
CPU가 인터럽트 되면, CPU는 하던 일을 중단하고 즉시 고정된 위치로 실행 위치를 옮긴다.
이 위치는 일반적으로 인터럽트를 위한 서비스 루틴이 위치한 시작 주소를 가지고 있으며, 인터럽트 서비스 루틴이 시작된다. 인터럽트 서비스 루틴이 완료된 뒤에는, 인터럽트 됐던 연산을 재개한다.
인터럽트 구조는 인터럽트 된 명령의 주소를 반드시 저장해야 하며, 복귀하기 전에 상태를 복원해야 한다.
인터럽트를 서비스 한 후, 저장되어 있던 복귀 주소를 Program Counter에 적재하고, 인터럽트에 의해 중단되었던 연산이 인터럽트가 발생하지 않았던 것처럼 다시 시작한다.
커널은 실행기(Executor)를 통해 프로그램을 실행시킨다. 실행기는 기억장치(Storage)에서 exe파일(Windows의 경우)를 가져오고, 커널이 이것을 메모리에 할당해 실행시킨다. 이처럼 모든 프로그램은 메인 메모리에 로드외어 실행되며, 메인 메모리는 보통 RAM(Random-Access Memory)라고 부른다. 하지만 RAM은 모든 프로그램을 담기엔 너무 작고 비싸다. 또한 전원이 나가면 저장된 데이터가 모두 사라지는 휘발성(Volatile)장치다. 그래서 보조기억장치(Secondary storage)가 필요하다.
기억장치는 여러 입출력장치 중 하나일 뿐이다. 컴퓨터는 다양한 입출력 장치를 가지고 있으며, 입출력 컨트롤러는 각각 다른 장치를 담당한다. 컴퓨터는 이 컨트롤러 덕분에 다양한 장치를 사용할 수 있다. 또한 운영체제는 각 장치 컨트롤러를 제어하기 위한 장치 드라이버를 가지고 있다.
입출력 명령을 수행하기 위해 장치 드라이버는 장치 컨트롤러의 레지스터를 로드한다. 장치 컨트롤러는 레지스터에서 "키보드로부터 문자 읽어오기"와 같은 동작을 읽고, 장치에서 로컬 버퍼로 데이터를 전송하기 시작한다. 데이터의 전송이 끝나면 장치 컨트롤러는 장치드라이버에게 인터럽트를 보내 동작이 끝났음을 알리고, 장치 드라이버는 통제권을 운영체제에게 돌려준다.
사용자 프로그램은 커널과 사용자 프로그램을 매개하는 인터페이스인 시스템 콜(System call)을 통해 입출력을 요청할 수 있다.
현대 컴퓨터 시스템은 기본적으로 폰 노이만 구조를 따른다.
과거 대부분의 컴퓨터는 싱글 프로세서를 사용했다. 싱글 프로세서 컴퓨터에는 하나의 메인 CPU만 탑재되며, 장치에 따라 특별한 목적을 가진 프로세서가 들어갔다. 가령 디스크 프로세서는 디스크 연산만 수행하고, 키보드 프로세서는 키보드 연산만 수행하는 식이다.
이젠, 일반적인 컴퓨터 시스템이 되었다. 멀티 프로세서 컴퓨터는 2개 이상의 프로세서를 가지고 있다. 처음에는 서버 컴퓨터에 처음 적용됐는데, 지금은 모바일 기기도 멀티 프로세서 시스템으로 만들어진다. 멀티 프로세서 시스템은 몇 가지 장점을 가지고 있다.
다중 처리기 시스템의 두 형태
운영체제는 프로그램이 수행될 환경을 제공한다.
운영체제는 다양한 발전 방향을 따라 구성되었기 때문에, 내부 구조가 매우 다양하다.
가장 중요한 면은 다중 프로그래밍(Multi-Programming)을 할 수 있는 능력이다.
일반적으로, 단일 사용자는 CPU 또는 입출력 장치를 항상 바쁘게 유지할 수 없다.
다중 프로그래밍 (Multi-Programming)은 CPU가 수행할 작업을 항상 하나 가지도록 작업을 구성하며, CPU이용률 (CPU Utilization)을 증가시킨다.
<기본 idea>
1. 운영체제는 한 번에 여러 작업을 메모리에 적재하며, 이들 작업은 처음에 디스크의 작업 풀 내에 유지된다.
2. 보통 운영체제는 메모리에 있는 작업 중에서 하나를 선택해 실행을 시작한다.
3. 비다중 프로그래밍 시스템에서는 CPU가 쉬게 되지만, 다중 프로그래밍 시스템에서는 운영체제가 단순히 다른 작업으로 전환해 그 작업을 수행한다.
Multi-Tasking(시분할)은 다중 프로그램의 논리적 확장이다.
Multi-Tasking 시스템에서는 CPU가 다수의 작업들을 교대로 수행하지만, 매우 빈번하게 교대가 일어나기 때문에, 프로그램이 실행되는 동안에 사용자들은 각자 자기의 프로그램과 상호 작용할 수 있다.
Multi-Tasking 운영체제는 각 사용자에게 시분할 되는 컴퓨터의 작은 부분을 제공하기 위해서 'CPU 스케줄링'과 '다중 프로그래밍'을 사용한다.
Multi-Tasking과 다중 프로그래밍 운영체제에서는 여러 작업이 메모리에 동시에 유지되어야 한다. 만약 몇몇 작업이 메모리로 옮겨울 준비가 되었고, 그들 전부를 메모리에 보관할만한 공간이 불충분하다면, 시스템은 그들 중 몇 개를 선택해야 한다. 이러한 결정을 하는 것을 작업 스케줄링
이라고 한다.
여러 개의 작업이 동시에 실행 준비가 되어 있으면, 시스템은 그들 중 하나를 선택해야 한다. 그러한 결정을 내리는 것을 CPU 스케줄링
이라고 한다.
합리적인 응답 시간을 보장하는 더 일반적인 방법은 가상 메모리(Virtual Memory)이다.
이 방법은 일부만 메모리에 있는 작업의 수행을 허용하는 기법이다. (9장)
이 기법의 주요한 이점은 프로그램이 물리 메모리의 크기보다 더 커도 된다는 것이다.
더욱이 가상 메모리는 주 메모리를 크고 균등한 저장 장치의 배열로 추상화하여, 사용자에게 보이는 논리 메모리를 물리 메모리로부터 분리시킨다.
interrupt-driven
방식특권 명령(priviledged instructions)
를 실행한다. 만약 유저 모드에서 특권 명령을 실행하려 한다면 하드웨어는 이 동작을 막고 운영체제에게 트랩을 보낼 것이다. 유저 모드에서 합법적으로 커널 모드의 기능을 호출하고 싶다면 시스템 콜(system call)이라는 인터페이스를 통해야 한다.⭐️ 실행 중인 프로그램(program in executrion) = 프로세스(process)
⭐️ 프로그램은 passive(수동적)인 개체인 반면, 프로세스는 프로그램 카운터를 가진 active(능동적)개체
프로그램은 해당 instruction이 CPU에 의해 수행되지 않으면, 아무 일도 할 수 없다.
프로세스는 자신의 일을 수행하기 위해 CPU시간, 메모리, 파일, 그리고 입출력 장치를 포함한 여러 가지 장치를 필요로 한다.
한 프로세스는 한 시스템 내의 작업의 단위이다. 이러한 시스템은 프로세스의 집합으로 구성되는데, 프로세스들 중 일부는 운영체제 프로세스들(시스템 코드 수행)이며, 나머지는 사용자 프로세스들(사용자 코드 수행)이다.
<운영체제는 프로세스 관리와 연관해 다음과 같은 활동에 대한 책임을 진다.>
1. CPU에 Process와 thread를 schedule 하기.
2. User Process와 System Process의 생성과 제거
3. Process의 일시 중지와 재수행
4. Process Synchronization를 위한 기법 제공
5. Process Commnication을 위한 기법 제공
메인 메모리는 현대 컴퓨터 시스템의 핵심이며, 방대한 바이트의 배열이다. 그리고 각 바이트는 그들만의 주소를 가지고 있다. 이후 프로그램이 실행될 때 프로그램은 절대 주소(Absolute address)로 매핑(Mapping)되어 메모리에 로드된다. 메모리 관리는 여러 요인을 고려해야 하는 작업이며, 특히 시스템의 하드웨어 설계를 신경써야 한다.
운영체제는 메모리 관리를 위해 메모리의 어떤 부분이 어디에 쓰이는지, 누가 사용하는지 추적하고, 어떤 프로세스와 데이터가 메모리의 안팎으로 옮겨질지 결정한다. 또한 메모리 공간을 할당하고 해제하는 것도 운영체제가 하는 일이다.
CPU 이용률과 사용자에 대한 컴퓨터의 응답 속도를 개선하기 위해, 우리는 메모리에 여러 개의 프로그램을 유지해야 하며, 이를 위해서 메모리 관리 기법이 필요하다.
운영체제는 저장장치의 물리적 속성을 추상화해 파일(File)이라는 논리적 저장 단위로 정의하며, 파일을 물리적 매체(Physical media)에 담거나 저장장치의 파일에 접근하기도 한다.
자유공간의 관리
저장 장소 할당
디스크 스케줄링
운영체제는 하드웨어를 관리할 뿐 아니라 application이 실행되기 위한 환경을 제공하는 소프트웨어이다.
컴퓨터가 program을 수행하려면 program이 main memory에 있어야 한다.
주 메모리는 메모리가 직접 접근할 수 있는 유일한 대량 저장 장치로서, 휘발성 저장 장치이다.
대부분의 컴퓨터 시스템은 주 메모리의 확장으로 보조 저장 장치를 제공한다.
보조 저장 장치는 대용량의 데이터를 영원히 보존할 수 있는 비휘발성 저장 장치이다.
단일 처리기 시스템(Single Processor System)은 하나의 Processor만을 가지고 있다.
다중 처리기 시스템(Multi Processor System)은 물리 메모리와 주변 장치들을 공유하는 둘 또는 그 이상의 처리기를 가지고 있다.
CPU를 최대한 활용하기 위해, 현대의 운영체제들을 다중 프로그래밍(multi-programming) 개념을 도입했다.
다중 프로그래밍에서는 한 번에 여러 job들을 memory에 유지하므로, CPU는 항상 실행할 작업을 가지게 된다.
시분할 시스템(multi-tasking system)은 다중 프로그래밍의 확장이며, CPU 스케줄링 알고리즘은 작업들을 빠르게 교환해 가며 실행함으로써, 마치 각 작업이 동시에 실행되는 것 같은 착각을 주게 된다.
운영체제는 컴퓨터 시스템의 정확한 동작을 보상해야 한다.
사용자 프로그램이 시스템의 정상적인 동작을 방해하는 것을 막기 위해, 하드웨어는 사용자 모드와 커널 모드를 가지고 있으며, 여러가지 privileged instruction들은 kernel mode에서만 실행 가능하다.
timer는 무한 루프를 방지하는 효과를 가지고 있다.
Process는 운영체제에서의 일의 기본적인 단위이다.
Process Management는 프로세스의 생성 및 제거, 프로세스 간의 통신 및 동기화 기법을 포함한다.
운영체제는 어느 프로세스가 메모리의 어느 영역을 사용하고 있는지를 추적하여 메모리를 관리한다.
운영체제는 운영체제와 사용자를 보호하고 보안을 유지해야 한다.
'보호' 기법은 컴퓨터 시스템이 제공하는 자원들에 대한 프로세스와 사용자의 접근을 제어한다.
'보안' 기법은 외부 또는 내부의 공격에 대해 컴퓨터의 시스템 방어를 책임진다.
컴퓨팅은 다양한 환경에서 이루어진다.
전통적 컴퓨팅, 이동형 컴퓨팅, 분산 시스템, 클라우드 컴퓨팅 증이 있다.