1. 운영체제의 구조
💡 운영체제는 크게 커널과 인터페이스로 나뉜다.
1. 커널(Kernal)
- 운영체제의 핵심 기능을 모아놓은 것으로 운영체제의 성능은 커널이 좌우한다.
- 프로세스 관리, 메모리 관리, 파일 시스템 관리, 입출력 관리, 프로세스간 통신 관리 ****
- 자동차에 비유하면 엔진에 해당한다.
- 같은 커널을 사용하더라도 다른 인터페이스를 가진 형태로 제작할 수 있다.
- 유닉스의 사용자 인터페이스: shell, bash등
- 매킨토시의 인터페이스: 유닉스 계열의 커널을 사용 (사용자에게는 다른 운영체제처럼 보인다)
- 시스템 호출(system call)
- 사용자나 응용프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근을 차단한다. 따라서 자원을 이용하기 위해서는 시스템 호출이라는 인터페이스를 사용해야한다.
- e.g. C언어의
printf()
- 응용 프로그램 — 커널
- 드라이버(driver)
- 다양한 종류의 하드웨어를 커널에 연결한다.
- 마우스, 기보드등 복잡하지 않은 디바이스 드라이브는 커널에 포함되어 있어서 컴퓨터에 꽃기만해도 작동되지만 그래픽카드, 프린터등 복잡한 디바이스는 사용자가 직접 설치해야한다.
- 하드웨어 — 커널
2. 인터페이스(Interface)
- 사용자와 응용프로그램에 인접하여 커널에 사용자의 명령을 전달하고 실행결과를 사용자에게 알려준다.
Q. 가상머신이란?
- 유닉스에서 C언어로 만든 코드는 윈도우 운영체제에서 작동하지 않기 때문에 C언어 코드를 윈도우에 맞게 수정해야한다. 즉 개발자는 유닉스, 윈도우용 프로그램을 각각 따로 만들어야한다.
- 자바: 운영체제 위에 가상머신을 만들고 그 위에서 응용프로그램이 작동하게 하여 호환성 문제를 해결했다.
- 윈도우 운영체제에서 유닉스를 사용하고 싶은 경우 가상머신을 설치하여 사용할 수 있다.
2. 하드웨어의 구성
1. 컴퓨터의 구성
💡 컴퓨터는 필수장치와 주변장치로 이루어진다.
1.1 필수장치
- 중앙처리장치 (CPU): 명령어를 해석하여 실행하는 장치
- 메모리: 작업에 필요한 프로그램과 데이터를 저장하는 장소
1.2 주변장치
- 입력장치
- 출력장치
- 프린트, 모니터(+그래픽카드), 스피커(+사운드카드)
- 저장장치
- 메모리보다 느리지만 저렴하고 용량이 크며 전원의 ON/OFF와 상관없이 데이터를 영구적으로 저장한다.
- 자성을 이용하는 장치: 카세트테이프, 플로피디스크, 하드디스크(HDD)
- 하드디스크: 운영 체제, 애플리케이션 및 데이터 파일을 저장
- 메모리를 이용하는 장치: USB드라이버, SD카드, SSD
- 레이저를 이용하는 장치: CD, DVD
Q. GPU란(Graphical Processing Uit)?
- GPU는 그래픽용 CPU이다.
- 과거에는 그래픽계산을 CPU가 담당하고 그 결과만 그래픽카드에 전달했다.
- 최근에는 3D게임등 많은 계산을 필요로 하는 프로그램이 늘어남에 따라 그래픽카드에 GPU를 달아서 직접 계산한다.
1.3 하드웨어 사양 관련 용어
- 클록(clock): CPU 속도와 관련된 단위
- CPU가 작업할때의 일정한 박자이다. 클록이 일정 간격으로 tick을 만들면 거기에 맞추어 CPU안의 모든 구성 부품이 작업을 한다.
- Tick은 purse 혹은 clock tick이라고도 부른다.
- 메인보드의 클록이 틱을 보낼때마다 버스는 데이터를 보내거나 받는다.
- 헤르츠(Hz): 클록틱이 발생하는 속도
- 시스템 버스: 메모리와 주변장치를 연결하는 버스로 FSB(Front-side bus), 전면 버스라고 한다.
- CPU 내부 버스: CPU 내부에 있는 장치를 연결하는 버스로 BSB(Back-side bus), 후면 버스라고 한다.
- CPU내부 버스의 속도는 CPU클록과 같아서 시스템 버스보다 훨씬 빠르다.
2. 폰노이만 구조
💡 오늘날의 컴퓨터는 대부분 폰노이만 구조를 따른다. 폰노이만구조는 CPU, 메모리, 입출력장치, 저장장치가 버스로 연결되어있는 구조를 말한다.
- 폰노이만 구조가 등장하기 전의 컴퓨터는 hard wiring형태였기때문에 다른 용도로 사용하려면 전선의 연결을 바꿔야했다.
- 폰노이만은 메모리를 이용하여 프로그래밍이 가능한 컴퓨터 구조, 즉 하드웨어는 그대로둔채 작업을 위한 프로그램만 교체하여 메모리에 올리는 방식을 제안했다.
- 가장 중요한 특징은 “모든 프로그램은 메모리에 올라와야 실행할 수 있다.” 이다. **
- e.g. 워드프로세스 보고서를 작성한 경우, 보고서 파일은 하드디스크(저장 장치)에 저장되지만 프로그램과 데이터가 저장장치에서 바로 실행되지 않는다.
- 저장장치에 있는 프로그램을 실행하려면 프로그램이 메모리에 올라와야하며, 운영체제도 프로그램이기 때문에 메모리에 올라와야 실행이 가능하다.
3. CPU와 메모리
3.1 CPU의 기본 구성
💡 CPU는 산술논리 연산장치, 제어장치, 레지스터로 구성되며 이것들의 협업으로 작업을 처리한다.
필요한데이터를 가져와 레지스터에 저장하고 산술논리 연산장치를 이용하여 연산을 한 후, 그 결과를 다시 레지스터에 저장했다가 메모리로 옮긴다.
3.1.1 산술논리 연산장치(Arithmetic and Logic Unit, ALU)
- 데이터의 덧셈, 뺄셈, 곱셈, 나눗셈같은 산술연산과 AND, OR 같은 논리연산을 수행한다.
3.1.2 제어장치(Control Unit)
- 명령어를 해석하여 제어신호를 보내고 CPU 내의 데이터 흐름을 조절한다.
3.1.3 레지스터(Register)
- CPU가 연산을 하기위해 필요한 데이터를 CPU로 가져와 임시로 보관하는 장소이다.
- 사용자 가시 레지스터(user-visible register)와 사용자 불가시 레지스터(user-invisible register)로 나뉜다.
사용자 가시 레지스터
- 사용자 프로그램에 의해 변경된다.
- 데이터 레지스터(DR): CPU가 명령을 처리하는데 필요한 일반 데이터를 임시로 저장
- 주소 레지스터(AR): 데이터 또는 명령어가 저장된 메모리의 주소를 저장
사용자 불가시 레지스터
- 프로그램 카운터(PC): 다음에 실행할 명령어의 주소를 기억하고 있다가 제어장치에게 알려준다.
- 명령어 레지스터(MAR): 현재 실행중인 명령어를 저장한다.
- 메모리 주소 레지스터(MAR):
- 메모리 버퍼 레지스터(MBR): 메모리에서 가져온 데이터나 메모리로 옮겨갈 데이터를 임시로 저장한다. 항상 메모리 주소 레지스터와 함께 동작한다.
3.1.4 버스의 종류
💡 CPU와 메모리, 주변장치 간에 데이터를 주고받을 때 사용한다.
버스에는 다음 작업을 지시하는 제어 신호, 메모리의 위치 정보를 알려주는 주소, 처리할 데이터가 오고 가며 각각 제어버스, 주소 버스, 데이터 버스에 실린다.
제어 버스(control bus)
- 다음에 어떤 작업을 할지 지시하는 제어 신호가 오고 간다.
- 제어버스의 신호는 CPU, 메모리, 주변장치와 양방향으로 오고간다.
주소 버스(address bus)
- 메모리의 데이터를 읽거나 쓸 때 어느 위치에서 작업할 것인지를 알려주는 위치 정보(주소)가 오고 간다.
- 메모리 주소 레지스터와 연결되어 있으며 단방향이다.
데이터 버스(data bus)
- 데이터를 실어서 전달한다.
- 메모리 버퍼 레지스터와 연결되어 있으며 양방향이다.
버스 관련 용어
- 대역폭(bandwidth): 한번에 전달할 수 있는 데이터의 최대 크기
- 버스의 대역폭은 CPU가 한번에 처리할 수 있는 데이터의 크기와 같다.
- 버스의 대역폭, 레지스터의 크기, 메모리에 한번에 저장할 수 있는 데이터의 크기는 항상 같다.
- 워드(word): CPU가 한번에 처리할 수 있는 데이터의 최대 크기
💡 제어버스가 다음에 어떤 작업을 할지 신호를 보내주고 주소 버스가 위치 정보를 전달하면 데이터가 데이터 버스에 실려 목적지까지 이동한다.
3.2 메모리의 종류와 부팅
💡 모든 프로그램은 메모리에 올라와야 실행될 수 있다. 메모리에는 실행에 필요한 데이터가 존재하며, CPU와 협업하여 작업이 이루어진다. 메모리는 RAM과 ROM 두종류로 나뉜다.
- 메모리를 이루는 소자 하나의 크기는 1bit 혹은 0이나 1이 저장된다.
- 소자 하나만으로 데이터를 표현할 수 없어 메모리 주소는 바이트 단위로 저장되고 메모리에서 데이터를 읽거나 쓸 때는 워드 단위로 움직인다.
3.2.1 RAM(Random Access Memory)
- 읽거나 쓸 수 있다.
- 무작위로 데이터를 읽어도 저장된 위치와 상관없이 같은 속도로 데이터를 읽을 수 있다는 의미에서 이름이 유래되었다.
- RAM은 휘발성 메모리와 비휘발성 메모리로 나뉜다.
휘발성 메모리
- 전력이 끊기면 데이터가 사라진다.
- DRAM(Dynamic RAM): 저장된 0과 1의 데이터가 일정 시간이 지나면 사라지므로 일정 시간마다 다시 재생시켜야한다.
- SRAM(Static RAM): 전력이 공급되는 동안에는 데이터를 보관할 수 있어 재생할 필요가 없다.
- 속도가 빠르지만 가격이 비싸다.
- 캐시같은 고속 메모리에 사용
- SDRAM(Synchronous Dynamic Access Memory): 클록틱이 발생할 때마다데이터를 저장하는 동기 DRAM이다.
비휘발성 메모리
- 플래시 메모리(flash memory): 전력이 없어도 데이터를 보관하는 저장장치
- 디지털 카메라, MP3 플레이어, USB드라이버
- SSD: 하드디스크를 대신한다.
- 가격이 비싸지만 빠른 데이터 접근 속도, 저전력, 내구성때문에 개인용 컴퓨터, 노트북, 스마트폰등 많은 기기에 사용된다.
3.2.2 ROM(Read Only Memory)
- 전력이 끊겨도 데이터를 보관할 수 있지만 데이터를 한번 저장하면 바꿀 수 없다.
- 주로 바이오스(BIOS, Basic Input/Output system)를 롬에 저장한다.
3.2.3 부팅(Booting)
💡 운영체제도 CPU에 의해 실행되는 프로그램이기 때문에 메모리에 올라와야 실행할 수 있다. 따라서 컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅(booting)이라고 한다.
- 사용자가 컴퓨터의 전원을 켜면 롬에 저장된 바이오스가 실행된다.
- 바이오스는 CPU, 메모리, 하드디스크, 키보드, 마우스와 같은 주요 하드웨어가 제대로 작동하는지 확인한다.
- 이상이 없으면 하드디스크의 마스터 부트 레코드(Master Boot Record, MBR)에 저장된 부트 스트랩 코드를 실행한다.
- 마스터 부트 레코드: 하드 디스크의 첫번째 섹터
- 부트스트랩 코드: 운영체제를 메모리로 가져와 실행하는 역할을 하는 프로그램
- 부트 스트랩이 메모리에 올라오면 하드디스크에 저장된 운영체제를 메모리로 불러온다.