운영체제 기초
Windows, MacOS, Linux, UNIX(를 접하진 못했지만..) 등 다양한 운영체제가 우리 곁에 있다.
다양한 전자기기에 들어가는 임베디드 운영체제나, 안드로이드나 iOS또한 운영체제이다.
컴퓨터는 운영체제 없이도, 엄청난 제약이 걸리긴 하지만, 동작할 수 는 있다.
하지만 적합한 운영체제가 있어야 컴퓨터 하드웨어를 쓸모있게 만들어줄 수 있다.
하는 일
- 프로세스를 관리한다.
- 다양한 프로세스를 관리해서, 한 번에 다양한 일을 할 수 있게 해준다.
- 메모리를 관리한다.
- 모든 프로그램은 메모리에 올라와서 동작하는데, 이러한 멀티프로그래밍 환경에서 프로세스 메모리 관리는 필수이다.
- 하드웨어를 관리한다.
- 다양한 입출력 기기나 하드웨어에 대한 사용자의 직접적인 접근을 막고, 올바른 방법과 관리를 통해 운영되게 한다.
- 파일 시스템을 관리한다.
- 많은 파일들을 효율적으로 저장하고 관리한다.
역사
1943년, 미사일 탄도 계산을 위해 에니악이라는 전자계산기가 개발된다.
입출력 도중에는 CPU가 연산을 할 수가 없었다.
1950년 초, 진공관과 전선으로 만들어진 논리 회로를 쌓아 올린 집적 회로(IC)가 개발된다.
펀치 카드를 통해 CPU가 입력을 받았기에, 이를 한 번에 여러 작업을 모아서 전달하게끔 싱글스트림 배치시스템이 사용되었다.
1950년도 중후반, I/O 를 담당하는 디바이스 컨트롤러를 만들어서, 입출력 중에도 CPU가 계산할 수 있도록 하였다.
1960년도, 프로그램을 순서대로 하나씩 실행하는 것이 아닌, 메모리에 여러 프로그램을 올려놓고 시분할로 번갈아 가며 실행시키도록 한다.
이를 통해 I/O 를 대기하는 프로세스가 있을 때에도 CPU가 쉬지 않고 작업을 하게 되었다.
이러한 컴퓨터에 접근하는 터미널을 통한 멀티 유저 지원이 자연스레 파일시스템이라는 개념을 불러왔다.
C언어를 통해 UNIX 운영체제가 개발되었고, 이는 멀티프로그래밍, 다중사용자, 파일시스템이 구현된 운영체제이다.
운영체제의 구조
커널은 운영체제의 핵심으로서 프로세스와 메모리, 저장장치를 관리한다.
사용자는 이 커널에 직접적으로 접근할 수 없고, 인터페이스를 통해서만 접근할 수 있다.
인터페이스는 커널에 사용자의 명령을 전달하고, 결과를 알려주게 된다.
시스템 콜을 통해서 커널에 접근할 수 있게 되는데, 이는 커널이 자신을 보호하기 위해 제공하는 인터페이스로서, 자원에 직접 접근을 막는다.
커널은 하드웨어와 통신하기 위해 인터페이스로 드라이버를 사용한다.
필수장치
CPU : Central Processing Unit
- ALU (Arithmetic and Logical Unit)
- 산술논리 연산장치로서, 실제 데이터 연산을 담당한다.
- Control Unit
- 모든 장치들의 동작을 지시하고 제어한다.
- Register
- CPU내에서 계산을 위해 임시로 데이터를 보관하는 공간이다.
RAM : Random Access Memory
랜덤으로 데이터를 읽어도 저장된 위치와 상관없이 읽는 속도가 같은, 휘발성 메모리이다.
ROM : Read Only Memory
전력이 끊겨도 데이터가 유지되지만, 데이터가 수정이 불가능하기에 부팅과 관련된 바이오스를 저장하는 데 주로 쓰인다.
부팅과정
전원 버튼을 누르면, ROM에 저장된 바이오스가 실행된다.
바이오스는 전원, CPU, 메모리, 키보드, 마우스, 저장장치 등에 이상이 없는지 확인한다.
주요 장치에 이상이 없다면 저장장치에 있는 마스터 부트 레코드에 저장된 부트로더를 메모리로 가져와 실행한다.
이후 운영체제가 실행되면 운영체제가 이후의 일들을 전담하게 된다.
인터럽트
CPU가 IO를 필요로 하게 되면, 입출력 관리자를 통해 명령을 내리게 된다.
CPU입장에서는 이 IO 작업이 언제 끝날 지 모르기 때문에, 주기적으로 입출력 관리자에게 작업 완료 여부를 반복해서 확인한다.
이를 폴링 기법이라고 한다. 하지만 이는 CPU가 주기적으로 확인해야 하니 성능이 좋지 않다.
이를 개선하기 위해 비동기적인 인터럽트 가 만들어졌다.
이는 입출력 관리자가 작업 완료에 따라 CPU에게 신호를 주고, 인터럽트 서비스 루틴 (ISR) 을 실행시켜 작업을 완료시킨다.
하드웨어 인터럽트는 IO 디바이스 작업과 같은 방식이고, 소프트웨어 인터럽트는 사용자 프로그램에서 유효하지 않은 메모리에 접근하는 등의 상황에 쓰인다.
'공부한 이야기 > 윈도우 OS' 카테고리의 다른 글
IV : 컴퓨터 구조에 대한 두번째 이야기 (0) | 2023.04.29 |
---|---|
III : 64비트 기반 프로그래밍 (0) | 2023.04.29 |
II : 아스키코드 VS 유니코드 (0) | 2023.04.29 |
I : 컴퓨터 구조에 대한 첫번째 이야기 (0) | 2023.04.29 |
프로세스 기초 (0) | 2022.08.12 |