[쉽게 배우는 운영체제] 운영체제와 컴퓨터 구조
![[쉽게 배우는 운영체제] 운영체제와 컴퓨터 구조 글의 썸네일 이미지](/_next/image?url=https%3A%2F%2Fvelog.velcdn.com%2Fimages%2Fd159123%2Fpost%2F7e15a104-af73-4e10-9e61-45320108026d%2Fimage.png&w=1920&q=75)
⚙️ 운영체제
컴퓨터는 데이터를 통해 작업을 처리하고 결과를 출력하거나 저장한다. 컴퓨터를 통해 데이터를 의미 있는 자료로 처리하면 이를 정보(Information)라고 부르며 데이터를 통해 정보로 만드는 모든 기술을** IT(Information Technology)**라고 부른다.
컴퓨터는 크게 하드웨어와 소프트웨어로 분류되며 소프트웨어는 응용 프로그램과 시스템 소프트웨어로 구분된다.
- 응용 프로그램: 특정 작업을 위해 사용하는 프로그램(한글, 워드, 플레어어 등,,)
- 시스템 소프트웨어: 하드웨어와 응용 프로그램을 관리하기 위한 소프트웨어(운영체제, 유틸리티)
컴퓨터의 다양한 프로그램들은 키보드, CPU, 메모리 등 다양한 컴퓨터 자원을 공유한다. 하지만 각 프로그램이 필요에 따라 마음대로 자원을 차지하게 되면 컴퓨터는 오류를 발생시킨다. 이런 잘못된 동작으로 컴퓨터가 망가지는 것을 방지하기 위해 컴퓨터 전체를 관리하고 운영하는 소프트웨어인 운영체제(Operation System, OS)가 탄생하게 된다.
역할
- 자원 관리 (효율성) 응용 프로그램이 필요한 컴퓨터 자원을 적절히 분배하고 회수한다.
- 자원 보호 (안정성) 비정상적인 작업으로부터 컴퓨터 자원을 보호한다.
- 하드웨어 인터페이스 제공 (확장성) 다양한 하드웨어를 드라이버를 통해 설치할 수 있게 인터페이스를 제공한다.
- 사용자 인터페이스 제공 (편리성) GUI와 같이 사용자가 운영체제를 더 편리하게 사용할 수 있는 인터페이스를 제공한다/
⚙️ 커널과 인터페이스

- 유틸리티: 바이러스 검사, 디스크 조각 모음, 압축 프로그램등과 같이 운영체제의 작업을 보조하는 소프트웨어
시스템 호출 사용자, 응용 프로그램이 컴퓨터 자원을 사용하기 위해 제공되는 인터페이스이다.
예를 들어, 응용 프로그램 A와 B가 하드디스크에 데이터를 각각 저장하려고 할 때, 두 프로그램이 메모리에 직접 접근하면 기존 저장된 데이터가 삭제될 수도, 비효율적인 저장이 발생할 수도 있다.
하지만 커널이 제공하는 write() 시스템 콜을 통해 요청하면 응용 프로그램은 어느 위치에 어떻게 저장되는 지 알 지 못하더라도 커널을 통해 안전하게 저장이 가능하며 read()를 통해 데이터를 읽어올 수 있다.
시스템 호출은 커널이 제공하는 시스템 자원을 사용하기 위한 하나의 함수이며 응용 프로그램은 자원에 접근하거나 운영체제의 서비스를 이용하기 위해서는 시스템 콜을 사용해야 하며 이를 통해 컴퓨터 자원에 대한 안정성을 확보할 수 있다.

- C언어에서
printf()를 호출하면 운영체제의 시스템 콜write()함수를 호출하고 커널 모드로 들어가 해당 함수를 실행시킨다. 이 후 함수가 종료되면 해당 함수의 리턴값을 반환하여 사용자 프로그램에 전달한다.
드라이버
커널은 주변 장치와 데이터를 주고 받을 수 있는 표준 방식을 제공하고 있으며 다양한 주변 장치들은 커널과 통신하기 위해 표준 방식에 따른 드라이버가 제공된다.
드라이버는 커널이 제공할 수도 있고 혹은 주변 장치의 제작자가 추가적인 기능을 제공하는 경우에 드라이버를 따로 추가되어 설치할 수 있다.
커널
| 핵심 기능 | 설명 |
|---|---|
| 프로세스 관리 | 프로세스에 CPU 배분 및 작업을 위한 환경 제공 |
| 메모리 관리 | 프로세스 작업 공간 제공 |
| 파일 시스템 관리 | 데이터 저장 및 접근 인터페이스 제공 |
| 입출력 관리 | 필요한 입출력 서비스 제공 |
| 프로세스 간 통신 관리 | 공동 작업을 위한 프로세스 간 통신 환경 제공 |
⚙️ 컴퓨터 구조
폰노이만 구조
CPU, 메모리, 입출력장치, 저장장치가 버스로 연결된 구조
폰노이만 구조가 등장하기 전에는 컴퓨터의 전선을 직접 연결하여 회로를 구성하는 하드와이어링 형태였으며 다른 용도로 사용하기 위해서는 전선을 다시 연결하여야 했다.
하지만 폰노이만 구조에서는 메모리를 이용한 프로그래밍이 가능한 컴퓨터 구조이기 때문에 하드웨어의 변경없이 메모리에 다른 프로그램을 올리면 여러 용도의 프로그램을 실행시킬 수 있게 되었다.
즉, 현대에 사용되는 폰노이만 구조에서 모든 프로그램은 메모리에 올라와야 실행이 가능하다.
클록과 헤르츠
CPU는 일정한 박자에 맞춰 작업이 진행되며 이 박자를 클록(Clock)이라고 한다. 데이터를 가져오거나 저장하는 작업 또한 해당 클록에 맞춰 작업이 실행된다.
클록을 통해 작업의 안정성을 높인다.
예시 연산:
- 연산 A: 1 + 2 → 3 (덧셈)
- 연산 B: 4 × 5 → 20 (곱셈)
연산 A와 B의 속도가 다를 경우, A는 먼저 완료되었지만 B는 아직 계산 중일 수 있다. 이 상태에서 A와 B의 결과를 더하려고 하면, B의 결과가 준비되지 않아 잘못된 값이나 에러가 발생할 수 있다.
클록을 사용하면 연산의 진행 타이밍을 통일시킬 수 있어, 모든 연산이 동기화된 상태에서 안전하게 수행된다
헤르츠(Hz)는 1초 동안 몇 번의 작업이 진행되는가, 몇 번의 클록 틱이 발생하는 가를 의미하는 단위이다.
⚙️ CPU와 메모리
CPU의 구성요소
- ALU(Arithmetic and Logic Unit): 산술논리 연산장치
- 제어장치: 작업을 지시하는 장치
- 레지스터(Register): 데이터를 임시로 보관하는 공간
//Pseudo Code int D2 = 2; int D3 = 3; int sum;sum = D2 + D3
//Assembly Pseudo Code LOAD mem(100), register2 LOAD mem(104), register3 ADD register5, register2, register3 MOVE register5, mem(160)
CPU는 고급 언어를 이해할 수 없기 때문에 컴파일을 통해 기계어로 변환을 시켜 작업한다. 기계어와 유사한 어셈블리어로 CPU 작업 과정을 살펴볼 수 있다.
- 메모리 100번 주소의 값을 레지스터 2로 이동시킨다.
- 메모리 104번 주소의 값을 레지스터 3으로 이동시킨다.
- 레지스터 2와 3의 합을 레지스터 5에 저장한다.
- 레지스터 5에 저장된 값을 메모리 160번 주소로 이동시킨다.

- 제어장치는 메모리로부터 연산에 필요한 데이터를 레지스터로 저장하라는 명령을 내린다.
- 레지스터에 있는 값을 ALU로 보내서 연산하라는 명령을 내린다.
- ALU는 연산 후 결과 값을 레지스터에 임시로 저장한다.
- 레지스터에 저장된 결과값을 메모리에 저장하라는 명령을 내린다.
레지스터 종류
데이터 레지스터(Data Register, DR): 메모리에서 가져온 데이터 임시 보관
주소 레지스터(Address Register, AR): 데이터 혹은 명령어가 저장된 메모리 주소 저장
특수 레지스터
프로그램 카운터(Program Counter, PC): 다음 명령어 주소 저장
명령어 레지스터(Instruction Register, IR): 현재 실행 중인 명령어 저장
메모리 주소 레지스터(Memory Address Register, MAR): 작업에 필요한 메모리 주소 저장
메모리 버퍼 레지스터(Memory Buffer Register, MBR): 메모리에서 가져오가나 옮겨갈 데이터 임시 저장

- PC에는 코드의 첫 행을 의미하는 1이 저장되며 1행 코드인
LOAD mem(100), register(2);를 실행한다. - 명령어 레지스터에는 현재 실행 중인 코드의 명령어인
LOAD가 저장되고 메모리 주소 레지스터에는 작업에 필요한 메모리 주소인100이 저장된다. - 제어장치는 두 데이터를 통해 메모리 관리자에게 메모리 100번 주소의 데이터를 불러온다.
- 메모리 관리자는 직접적으로 CPU 레지스터에 접근할 수가 없기에, 메모리 버퍼 레지스터에 저장시킨다.
- 제어장치는 메모리 버퍼 레지스터의 값을 레지스터 2로 이동시킨다.