- 운영체제 : 컴퓨터의 사용자와 하드웨어 사이에서 중개자 역할을 해주는 프로그램
- 운영체제의 역사
수작업 -> 단일 프로그래밍 -> 다중 프로그래밍 & 시분할 -> 모바일 OS & 실시간 시스템 - 운영체제의 목적
- 사용자가 컴퓨터를 효율적으로 사용하는 것
- 컴퓨터의 하드웨어가 효율적으로 사용되는 것 - 컴퓨터 시스템의 처리 구조
운영체제는 사용자와 하드웨어간의 전반적인 상호작용을 하면서 컴퓨터가 실행되는 동안 항상 수행되는 프로그램입니다.
- 사용자 관점에서 볼 때 좋은 운영체제란 사용의 용이성에 중점을 두고 자원 이용의 극대화에 중점을 둔 운영체제라고 할 수 있습니다. 따라서 운영체제란 PC, 대형 컴퓨터 등을 가리지 않고 항상 사용자를 편리하게 해주는 하나의 프로그램이라고 할 수 있습니다.
- 시스템의 관점에서 볼 때 좋은 운영체제란 하드웨어와 친밀하면서 자원을 효율적으로 할당해주는 자원 할당자 역할을 하는 운영체제입니다. 컴퓨터를 효율적이면서 공정하게 운영할 수 있도록 요청에 따라 적절한 자원을 할당해주며, 사용자의 입/출력을 제어합니다.
사용자가 이용하기 편하고, 하드웨어의 자원을 효율적으로 잘 쓰일 수 있게 해주는 것이 좋은 운영체제..
- 시스템의 발전에서 주요하게 꼽히는 부분은 바로 일괄처리 시스템에서 다중프로그램&시분할 시스템으로의 발전입니다.
- 일괄 처리 시스템 (Batch System)
초기의 컴퓨터가 동작하는 방식으로서 물리적으로 콘솔에서 수행을 하던 방식에 사용하던 시스템입니다. 초기의 운영체제는 즉시적으로 데이터를 처리할 수 있는 여건 또한 갖추지 못했습니다. 따라서 그 대안으로 일괄처리 시스템이 운영체제에 도입이 됨으로써 비슷한 것은 주기적으로 한 번에 묶어서 처리할 수 있게 되었습니다.
일괄처리 시스템은 처리 속도를 향상시키기 위해서 유사한 요구를 가지는 작업들을 함께 모아서 이들을 하나의 그룹으로 수행합니다. 다만 기계적인 입/출력 장치의 속도가 CPU와 같은 전자적인 장치의 속도보다 느리기 때문에 CPU가 계속해서 쉬는 상태(idle)인 경우가 많습니다.
※ 다중 프로그램 시스템 (Multi-Programmed System) : CPU가 수행할 작업을 항상 가지도록 하는 방식입니다. 먼저 하드디스크나 SSD에서 여러 개의 프로그램을 선택해서 메인 메모리(RAM)에 적재합니다. 이후에 메모리 내에 있는 작업 중에 하나를 선택해 차례대로 실행합니다. 이 때 수행 중인 작업이 입/출력 등 때문에 기다리는 상태에 도달하면 CPU는 다른 작업으로 넘어가서 수행을 계속합니다. 이후에 첫 번째 작업이 끝나면 현재의 작업을 중단하고 다시 첫 번째 작업이 CPU를 차지하게 되는 방식입니다.
다중 프로그래밍 시스템 덕분에 프로그램에서 카드를 읽거나 프린터를 쓰는 등의 시간에도 CPU를 계속해서 사용할 수 있게 되었습니다.
※ 시분할 시스템 (Time-Sharing System) : 다중 프로그래밍의 장점을 채택하여 확장한 시스템으로써 프로그램이 수행이 되고 있을 때 아주 짧은 주기로 CPU를 각각의 프로그램에 할당을 해 주는 방법입니다. 시분할 시스템으로 사용자는 프로그램이 수행이 되고 있는 동안에도 상호작용(Interact)할 수 있게 됩니다. 아주 짧은 주기로 전환이 이루어지기 때문에 각 사용자는 모든 프로그램이 동시에 작동을 하고 있다고 느끼게 됩니다.
예를 들어 리눅스(Linux)와 같은 운영체제는 여러 명의 사용자가 동시에 한 대의 컴퓨터에 접속을 해서 서로 다른 처리를 할 수 있도록 해주는데 이는 시분할 시스템을 적절하게 반영한 사례라고 할 수 있습니다.
※ 작업 스케쥴링 : 보조기억장치에 프로그램이 저장되어 있고 그 중 일부를 선택해서 메모리에 적재하는 전략입니다.
※ CPU 스케쥴링 : 메모리에 올라온 작업들 중에 무엇부터 실행할지 고르는 전략입니다.
※ 일괄처리 시스템은 상호작용이 필요 없는 큰 단위의 작업들을 수행할 때 사용이 됩니다.
※ 다중 처리 시스템 (Multiprocessor System) : CPU가 여러 개인 시스템을 의미하며 각각의 CPU들이 아주 밀접하게 통신을 하는 구조를 가지고 있습니다. 당연히 성능이 하나의 CPU가 있을 때보다 더 좋으며 하나의 처리기가 고장이 나더라도 속도가 느려질 뿐 시스템은 정상적으로 작동합니다.
- 대칭적 멀티프로세서 시스템 : 각 CPU가 하나의 운영체제 하에서 작동합니다. 또한 CPU끼리 데이터를 효율적으로 공유하는 구조로 운용이 됩니다.
- 비대칭적 멀티프로세서 시스템 : 각 처리기마다 특정한 작업이 정해져 있고 하나의 주요 CPU가 시스템을 제어하며 다른 CPU들은 미리 정의된 작업 혹은 명령을 수행합니다.
※ 분산 처리 시스템(Distributed Processing System) : 네트워크를 이요해 동시에 작업을 처리하는 시스템으로 각각 CPU들은 메모리를 공유하지 않습니다. 당연히 적절한 자원 공유로 계산 속도가 증가하고 신뢰성이 증가합니다.
- 클라이언트 & 서버 시스템 (Client & Server System) : 클라이언트가 서버로 어떠한 작업 요청을 보내고 서버는 그 작업을 수행해서 다시 클라이언트에게 응답을 보내는 구조입니다. 대표적으로 웹 사이트와 접속자 사이의 관계를 이야기할 수 있습니다.
- P2P 시스템 (Peer-To-Peer System) : 각 컴퓨터가 서버이자 클라이언트가 되는 시스템으로써 대표적인 예시로 토렌트(Torrent)서비스가 있습니다
※ 클러스터 시스템 (Clustered System) : 물리적으로 많은 CPU를 한 곳에 모아서 특정한 작업을 수행하는 시스템입니다. LAN으로 서로 연결된 각각의 CPU는 다른 CPU와 상호작용하여 고속 처리 서비스를 지원하게 됩니다.
- 대칭적 클러스터 시스템 : 각각의 CPU가 호스트가 되어서 서로를 관리하는 구조로 둘 이상의 작업을 수행할 수 있습니다.
- 비대칭적 클러스터 시스템 : 호스트 CPU가 다른 CPU를 관리하면서 특정한 CPU가 작동을 중지하면 호스트 CPU가 작업을 돕는 구조입니다.
※ 실시간 시스템 (Real-Time System) : 실시간 시스템은 CPU의 동작이나 작업이 즉시적인 처리를 요할 때 채택되는 시스템입니다. 주로 의학 영상 시스템이나 무기 시스템에 실제로도 굉장히 많이 사용되고 있습니다.
- 연성 실시간 시스템 (Soft Real-Time System) : 더욱 우선순위를 가지고 빠르게 계산이 되긴 해야 하지만 절대적으로 시간만을 중요시하지는 않는 시스템으로 읿나 컴퓨터에도 많이 녹아 있는 구조입니다. ex)음악 등을 들을 때는 웬만하면 컴퓨터가 렉이 걸려고 끊이지 않습니다.
- 경성 실시간 시스템 (Hard Real-Time System) : 빠른 시간이 절대적으로 요구되는 시스템으로 단기 메모만 써서 시간 엄수를 최우선적으로 끌어 올립니다. 예를 들어 정밀하고 신속한 위치 판별을 요구하는 미사일 발사 시스템을 이야기할 수 있습니다.
※ 컴퓨터 시스템에서 CPU와 각 장치들은 서로 연결되어 메모리를 공유합니다. 각각의 장치마다 장치 제어기(Controller)가 작업을 도와주며 모든 기계들은 동기화되어 적절히 작동합니다.
부팅과정 +a) https://mamu2830.blogspot.com/2020/04/bios-post-mbr.html
※ 컴퓨터의 부팅 과정
-전원이 켜질 때 ROM에 저장된 초기 프로그램(BootStrap)을 실행합니다.
-초기 프로그램은 메모리, CPU레지스터 등을 초기화시킵니다.
-이후에 운영체제를 찾아서 메모리에 적재합니다.
-운영체제는 첫번째 프로세스를 즉시 실행합니다.
-인터럽트가 발생하면서 CPU가 각종 작업을 처리합니다.
※ 하드웨어와 소프트웨어는 모두 CPU에 인터럽트를 발생시킬 수 있습니다. 일반적으로 인터럽트는 입출력 연산이 종료되었을 때, 예외가 발생했을 때, 운영체제의 다양한 서비스를 요구할 때 등 다양한 이유로 발생할 수 있습니다.
※ 인터럽트가 발생했을 때 CPU는 현재 하던 일을 중단하고, 그 인터럽트에 대한 처리를 먼저 하게 됩니다. 그러한 처리를 '서비스 루틴'이라고 하며 일반적으로 OS가 이를 처리합니다. 서비스 루틴이 종료가 되면 다시 CPU는 인터럽트 되었던 그 연산을 재개합니다.
※ 인터럽트가 요청되었을 때 처리할 수 있는 방법은 2가지입니다.
(방법1)
-운영체제가 어떠한 종류의 인터럽트인지 확인합니다.
-인터럽트 핸들러(Handler)를 호출해서 인터럽트를 처리합니다.
(방법2)
-인터럽트가 요청이 되면 인터럽트 서비스 루틴의 주소를 가리키는 포인터들로 구성된 인터럽트 벡터 테이블을 참조합니다.
-참조된 포인터가 가리키는 인터럽트 처리 루틴을 호출해서 인터럽트를 처리합니다.
※ 최근에는 방법 2를 채택한 운영체제가 많습니다. 인터럽트가 발생하면, OS는 하던 일에 대한 정보를 저장하고 중단합니다. 인터럽트 벡터로 제어를 옮겨 요청한 인터럽트 처리 루틴의 주소를 가리키는 포인터를 참조합니다. 포인터를 따라 이동하여 인터럽트 처리 루틴을 완료한 뒤에 다시 하던 일로 돌아갑니다.
※ 인터럽트가 실행이 되고 있을 때 다른 인터럽트가 또 발생하는 경우에는 다른 인터럽트들을 대기시킵니다. 대기를 시키는 이유는 데이터 소실을 막기 위함입니다. 또한 인터럽트 사이에는 우선순위가 있어서 우선순위에 따라서 인터럽트 처리 순서를 조절합니다.
※ 입력 시스템의 작동 과정
- CPU가 장치제어기의 레지스터에 명령을 적재합니다.
- 장치 제어기는 레지스터 내용을 조사하여 수행할 동작을 검사합니다.
- 레지스터 내용이 읽기 명령이므로 입력 장치에게 읽기 신호를 보냅니다.
- 입력 장치는 데이터를 읽어서 버퍼에 저장합니다
- 제어 부분은 CPU에 인터럽트를 발생합니다.
- CPU가 버퍼에서 데이터를 읽어 들이고 입력이 완료됩니다.
※ 장치 제어기 : 공통버스와 장치 사이에 위치하여 장치를 제어하는 역할을 합니다. 장치 제어기는 내부적으로 저장 장치를 가지고 있을 수 있으며 자신의 주변 장치와의 데이터 송수신을 할 수 있도록 인터페이스 역할을 합니다.
※ 동기식 입출력 : 입출력이 시작되고 끝난 후에 제어가 프로세스로 복귀되는 구조.
※ 비동기식 입출력 : 입출력이 시작되고 끝나기 전에 사용자 프로그램으로 제어가 되돌아가는 구조. 하나의 입출력이 실행되는 동안에도 다른 시스템 작업들을 병행할 수 있다는 점에서 효율성이 증가합니다. 다만, 이 경우 입출력 장치 별로 장치의 종류, 주소, 상태 등의 정보를 매 순간 저장하여 관리할 필요가 있습니다. 이런 정보는 '장치 상태 테이블'의 형태로 저장되어 관리합니다.
※ DMA (Direct Memory Access) 구조
DMA 방식은 데이터를 낱개가 아니라 블록 단위로 전송하는 효율적인 방식 중 하나입니다. DMA 방식을 채택하면 한 블록 단위의 데이터 전송을 할 때는 CPU의 간섭이 없고 자체적으로 입출력 작업을 처리할 수 있습니다. 따라서 고속의 입출력 장치를 위해서 사용이 되며 기존에 발생했던 병목 현상을 개선하는 기술로 활용됩니다.
작동과정
- 운영체제가 입출력 요청을 보냅니다.
- DMA 제어기의 레지스터에 주소와 전송 길이가 저장됩니다.
- DMA 제어기는 한 블록의 입출력 동작을 수행하고 그 동안 CPU는 다른 작업을 합니다.
- 입출력 동작이 완료되면 DMA 제어기는 CPU에게 완료했다는 인터럽트를 보냅니다.
운영체제(Operating System)란?
-컴퓨터 하드웨어와 컴퓨터 사용자 간의 인터페이스로 동작하는 시스템 소프트웨어
-컴퓨터의 자원을 독점적, 효율적으로 관리
-사용자가 시스템을 편리하고 효과적으로 사용할 수 있는 환경을 제공 (응용 프로그램의 실행을 관리하고 제어함, 입출력 제어 및 데이터 관리 등의 서비스 제공)
-컴퓨터 부팅시 로딩되어 다른 프로그램의 실행을 제어하고 사용자 요청을 처리
운영체제의 역할
-컴퓨터의 자원(Resource)를 관리 (하드웨어 자원-각종 하드웨어 구성 요소 /소프트웨어 자원-응용프로그램, 파일, DB)
-자원에 대한 독점(exclusive) 접근 (모든 관리 권한을 가짐- 자원 공유, 자원 할당, 자원 액세스, 자원 입출력 등)
-관리자(supervisor) (실행중인 프로그램 관리, 메모리 관리, 디스크 장치 관리, 파일 관리, 입출력 장치 관리, 계정 관리)
-소프트웨어(software) (커널이라 불리는 핵심 코드, 각종 도구 프로그램 ex)파일 탐색기, 작업관리자, 제어판)
운영체제의 목적
-사용자가 다양한 프로그램들을 '편리'하고 '효율'적으로 수행할 수 있는 환경 제공
-응용 프로그램 개발자들의 메모리/입출력 등의 관리 부담 해소
다중 프로그래밍 기법
- 미리 메모리에 여러 프로그램을 적재(메모리가 수용할 수 있는 만큼)
- 프로세서가 한 프로그램 처리 도중 I/O 처리 등으로 대기하게 되면 적재된 다른 프로그램으로 전환
(여러 작업을 동시 처리하며 자원들을 효율적으로 사용할 수 있는 환경 제공, 사용자가 컴퓨터와 상호작용하지는 못함)
출처 : https://www.youtube.com/watch?v=1TJmq1BOLMw&list=PLV1ll5ct6Gtz5fnKa6kwluZJw4Zz2XbqM&index=2