본문 바로가기
독후감

컴퓨터 구조와 운영체제 핵심 노트를 읽고서

by bantomak 2024. 9. 30.
반응형

한줄평

컴퓨터 구조와 운영체제는 공부하고 공부해도 끝이 없다.

 

목차

1부 컴퓨터 구조

  • 컴퓨터 구조는 왜 알아야 하나요?
  • 컴퓨터는 정보를 어떻게 처리하나요?
  • 컴퓨터는 명령어를 어떻게 처리하나요?
  • CPU는 어떤 원리로 동작하나요?
  • 하드웨어 측면에서 주기억 장치란 무엇인가요?
  • 캐시 메모리는 어떻게 동작하나요?
  • 보조기억 장치는 어떻게 동작하나요?
  • 입출력 장치는 어떻게 동작하나요?
  • 병렬처리란 무엇인가요?

2부 운영체제

  • 운영체제를 시작해 볼까요?
  • 프로세스 상태 전환이란 무엇인가요?
  • 프로세스 동기화란 무엇인가요?
  • CPU 스케줄링이란 무엇인가요?
  • 교착상태란 무엇인가요?
  • 운영체제 관점에서 주기억 장치란 무엇인가요?
  • 가상 메모리란 무엇인가요?
  • 파일 시스템이란 무엇인가요?

컴퓨터 구조

컴퓨터 구조는 컴퓨터의 물리적 구성과 동작 방식을 설명하는 분야이다.

 

컴퓨터의 물리적 구성에는 CPU라는 이름으로 많이 알고 있는 중앙 처리 장치, 메모리나 하드 디스크 드라이버 같은 기억 장치, 키보드나 마우스 같은 입출력 장치 등이 있다. 이러한 구성 중 하나라도 없으면 컴퓨터는 동작하지 않는다. 물론 컴퓨터의 구성이나 동작 방식을 이해하지 못한다고 해서 컴퓨터를 사용하지 못하는 것은 아니다. 하지만 문제가 발생했을 때 아무것도 몰라 손 놓고 있는 것보다 문제를 유추하여 스스로 해결할 수 있는 능력을 갖추는 것이 중요하다.

 

컴퓨터의 구성 요소

컴퓨터 시스템은 크게 소프트웨어와 하드웨어로 구성된다. 먼저 소프트웨어는 다음과 같이 운영체제와 응용 소프트웨어로 구분된다. 우리가 일반적으로 많이 사용하는 운영체제에는 윈도우, 리눅스 등이 있으며, 응용 소프트웨어에는 MS 오피스, 게임 등이 있다.

 

소프트웨어

  • 운영체제
  • 응용 소프트웨어(프로그램)

하드웨어

  • 중앙 처리 장치 (CPU)
  • 기억 장치 (주기억 장치, 보조기억 장치)
  • 입출력 장치 (키보드, 마우스, 모니터 등)

CPU(Central Processing Unit)는 컴퓨터의 두뇌로, 계산을 수행하거나 명령어를 처리하기 위해 '산술, 논리 장치'와'제어 장치'가 사용된다. 산술 논리 장치(Arithmetic Logic Unit, ALU)는 쉽게 설명하자면, 수학적 계산을 수행하는 '계산기'이다. CPU 내부에 있으며 산술 연산(덧셈, 뺄셈, 나눗셈, 곱셈)과 논리 연산(AND, OR, NOT 등)을 수행한다.

 

제어 장치(Control Unit, CU)는 컴퓨터에서 '지휘자'와 같은 역할을 한다. 컴퓨터 안에는 많은 부품이 있고 각자 많은 바대로 일하는데, 제어 장치는 이 모든 부품이 올바른 순서대로 작동하도록 지시한다.

 

CPU의 구성

  • 산술 논리 장치(ALU)
  • 제어 장치

기억 장치는 컴퓨터에서 데이터를 저장하는 장치이다. 일반적으로 임시 저장을 위한 주기억 장치와 영구적인 데이터 저장을 위한 보조기억 장치라는 두 가지 주요 유형으로 나뉜다. 주기억 장치는 CPU가 직접 접근할 수 있는 메모리로 램(Random Access Memory, RAM)이라고도 불린다. 여기에 CPU가 현재 처리 중인 데이터와 명령어가 일시적으로 저장된다. 보조기억 장치는 주기억 장치보다 더 큰 용량을 사용할 수 있으며 데이터를 영구적으로 저장한다.

 

기억 장치의 종류

  • 주기억 장치(메모리, RAM)
  • 보조기억 장치(HDD, SSD)
 

HDD에서 SSD로의 전환

스토리지 매체 패러다임의 변화 간단히 설명하면 HDD는 플래터라고 하는 얇은 마그네틱 필름에 자기적 자극을 가하여 데이터를 읽고 씁니다. 플래터를 물리적으로 돌려가면서 파일을 인식하므

jettstream.tistory.com

 

입출력 장치

입출력 장치(Input/Output device)는 컴퓨터와 사용자 간에 데이터를 교환하는 데 사용하는 장치이다.

즉, 입출력 장치는 데이터를 입력받고, 출력하는 역할을 수행하여 사용자가 컴퓨터와 상호작용할 수 있도록 돕는다.

 

시스템 버스

컴퓨터 내부에는 시스템 버스(System bus)가 존재한다. 시스템 버스는 CPU, 기억 장치, 입출력 장치 간에 데이터를 주고받기 위한 통신 경로이다. 시스템 버스는 주로 세 유형으로 구분된다.

 

시스템 버스의 유형

  • 주소 버스(address bus) : 메모리의 특정 위치를 지정할 때(CPU가 메모리의 특정 위치의 데이터를 읽거나 쓸 때) 사용
  • 데이터 버스(data bus) : 실제 데이터가 이동하는 통로
  • 제어 버스(control bus) : CPU, 메모리의 입출력 장치 사이 제어 신호(읽기, 쓰기, 버스 요청)와 상태 신호를 전송하는 데 사용

컴퓨터는 정보를 어떻게 처리하나요?

컴퓨터의 데이터 처리 단위 : 이진수

 인간이 숫자를 표현할 때는 10진수를 사용한다. 하지만 복잡한 연산도 빠른 시간에 계산해 내는 컴퓨터는 단순하게도 0과 1만을 사용하는 이진수(Binary)를 사용한다. 컴퓨터가 0과 1을 인식하는 원리를 이해하기 위해서는 컴퓨터의 구성 요소인 트랜지스터를 이해해야 한다. 트랜지스터(Transistor)는 전기 신호를 스위치처럼 켜고 끌 수 있는 반도체 기기로, 스위치가 켜지면 1, 꺼지면 0을 의미한다. 이때 1과 0은 각각 고전압과 저전압 상태를 의미한다.

 

 

세 발 달린 미니 마법사, '트랜지스터'

회로를 구성하는 주요 부품들은 모두 '다리'를 가지고 있다. 회로에 흐르는 전기를 받는 부분과 내보내는 부분이 있기 때문에 기본적으로 두 개의 다리를 가진다. 대표적으로 '저항'과 '축전기'

jettstream.tistory.com

컴퓨터의 데이터 처리 과정

고급언어(High level language, 고수준 프로그래밍 언어)는 사람이 이해하기 쉬운 프로그래밍 언어를 말하며, 파이썬, 자바 등이 있다. 이러한 언어로 작성된 프로그램은 컴파일이라는 과정을 거쳐서 기계어로 변환된다. 따라서 컴파일러는 고급언어를 기계어로 바꿔주는 프로그램을 의미한다.

 

다음은 파이썬으로 작성한 코드에 대한 예시이다.

# 두 변수를 정의한다
a = 5
b = 3

# 두 변수를 더한다
sum = a + b

# 결과를 출력한다
print(sum)

 

반면 어셈블리 언어(assembly language)는 좀 더 기계어에 가까운 언어로, 기호(MOV, ADD, SUB 등)나 명령어를 사용하여 컴퓨터의 하드웨어를 제어한다. 다음은 어셈블리 언어에 대한 예시이다. 어셈블리 언어로 작성한 코드에서 ; 기호는 주석을 의미한다.

 

MOV AX, 5    ;AX 레지스터에 5를 이동한다.
ADD AX, 2    ;AX 레지스터 값에 2를 더한다.
  • MOV: 이동(move)을 의미하는 것으로, 데이터를 레지스터에 이동(저장)하는 명령어
  • ADD: 레지스터의 값에 특정 값을 더하는 연산 명령어

어셈블리 언어는 고급언어와 기계어 중간에 위치하기 때문에 0과 1로만 구성된 기계어와 비교하면 그나마 사람이 이해하기 쉽다.

어셈블리 언어로 작성된 코드는 어셈블 과정을 거쳐 기계어로 변환된다. 따라서 어셈블러는 말 그대로 어셈블리 언어를 기계어로 바꿔주는 프로그램을 의미하며, 기계어는 다음과 같은 형태를 가진다.

 

001 (연산코드)

010010 (오퍼랜드)

 

연산코드(OpCode)는 어떤 연산을 수행할 것인지를 명시하고, 오퍼랜드(Operand)는 그 연산을 수행할 데이터나 데이터가 저장된 위치를 나타낸다. 그럼 어셈블리 언어를 기계어와 매핑해 보자. AL 레지스터에 1을 이동하는 어셈블리 언어를 작성해 보자.

  • MOV AL, 1
  • 10110000 00000001

여기서 10110000은 연산코드를 나타내며, 00000001은 데이터를 의미한다.

컴퓨터는 명령어를 어떻게 처리하나요?

명령어 유형

명령어(instruction)는 컴퓨터에 특정한 작업을 수행하도록 지시하는 기본 단위이다. 예를 들어 '옆사람에게 전화해줘'라고 하는 것도 명령어에 해당된다. 똑같이 CPU에게 'MS오피스를 실행해 줘'라고 지시하는 것도 명령어이다. 단지 컴퓨터가 이해할 수 있는 수준으로 바꿔 주는 것만이 다를 뿐이다.

 

컴퓨터가 이해할 수 있는 명령어는 다음과 같은 형태를 가진다.

연산코드의 명령어 유형

  • 데이터 전송 명령어 : LOAD, STORE, MOVE, PUSH, POP
  • 산술 연산 명령어 : ADD, SUB, MUL, DIV
  • 논리 연산 명령어 : AND, OR, XOR, NOT
  • 분기 명령어 : JUMP. CALL, RETURN

연산코드의 명령어 예시

  • PUSH A : A의 값을 메모리에 삽입
  • MOVE R1, A : A의 값을 R1으로 이동
  • ADD R1, A, B : A와 B를 더해서 R1에 저장

주소 명령어 분류

  • 0주소 명령어
  • 1주소 명령어
  • 2주소 명령어
  • 3주소 명령어

명령어 주소 지정 방식

  • 직접 주소 지정
  • 간접 주소 지정
  • 즉시 주소 지정
  • 레지스터 주소 지정
  • 레지스터 간접 주소 지정

직접 주소 지정

직접 주소 지정 방식(Direct addressing mode)은 어셈블리 언어와 같은 프로그래밍에서 사용되는 주소 지정 방식 중 하나이다. 이 방식은 명령어에 메모리 주소가 포함되기 때문에 CPU가 해당 주소에 있는 데이터에 직접 접근할 수 있다.

 

LOAD R2, 1000

LOAD는 인출과 관련한 연산코드이며, R2는 레지스터, 1000은 메모리 주소를 의미한다. 즉, 메모리 주소 1000에 저장된 데이터를 접근하여 레지스터 R2로 가져오라는 명령이다. 이 방식은 단순하고 이해하기 쉬우며 메모리에 직접 접근하기 때문에 실행 속도가 빠르다. 하지만 메모리 주소를 명령어에 직접 코딩해야 하기 때문에 프로그램을 수정할 때 변경할 게 많다.

간접 주소 지정

간접 주소 지정 방식(indirect addressing mode)은 명령어에 데이터가 있는 실제 메모리 주소를 직접 포함하지 않고, 대신 메모리 내 다른 위치를 가리키는 포인터를 사용한다. CPU는 이 포인터를 통해 간접적으로 데이터에 접근한다.

 

LOAD A, (4000)

괄호 내 2000은 메모리 주소를 가리키는데, 이는 실제 데이터가 저장된 위치를 직접 나타내는 것이 아니라 메모리 주소 2000에 저장된 값을 다시 메모리 주소로 사용한다는 것을 의미한다.

 

  1. 명령어 LOAD A,(4000)에 따라 메모리 주소 4000을 확인한다.
  2. 메모리 주소 4000에 5000이라는 값을 가져온다. 이때 5000은 데이터 값이 아니라 메모리 주소를 의미한다.
  3. 이제 CPU는 5000이라는 메모리 주소로 가서 실제 데이터를 가져온다.
  4. 그리고 그 데이터를 레지스터 A에 가져온다.

간접 주소 방식을 사용할 경우 메모리 주소 내부에 있는 주소값을 변경하는 방식으로 유연하게 프로그램 수정이 가능하다. 하지만 과정이 복잡해지고 메모리 접근 횟수가 추가되므로 실행 속도가 더 느릴 수 있다.

 

즉시 주소 지정

즉시 주소 지정 방식(immediate addressing mode)은 데이터를 직접 명령어 안에 포함하는 방식이다.

즉, 메모리 주소나 레지스터를 통해 데이터를 참조하지 않고 명령어 자체가 데이터 값을 직접 담고 있다. 따라서 연산 처리 속도가 빠르고 효율적이다.

 

MOV AX, 1234h

MOV는 데이터 전달 명령어이며, AX는 목적이 레지스터, 1234h는 16진수로 표현된 데이터 그 자체이다. 따라서 이 명령어는 AX레지스터에 16진수 값 1234h를 직접 할당하겠다는 의미이다.

 

레지스터 (직접) 주소 지정

레지스터 (직접) 주소 지정 방식(register addressing mode)은 메모리 대신 CPU 안에 있는 레지스터를 사용하는 방법이다.

 

MOV R1, R2

이 명령어는 R2 레지스터의 내용을 R1 레지스터로 이동시키라는 의미이다. 

 

레지스터 간접 주소 지정

레지스터 간접 주소 지정 방식(register indirect addressing mode)은 CPU 내 레지스터를 사용하여 메모리 주소를 간접적으로 참조하는 주소 지정 방식이다. 즉, 레지스터에 실제 데이터의 메모리 주소가 저장되어 있으며, 이 주소를 통해 데이터에 접근한다.

CPU는 어떤 원리로 작동하나요?

CPU의 구성

  • 산술 논리 장치(ALU)
  • 제어 장치

제어 장치(Control Unit, CU)는 명령어 실행 순서를 제어한다. 즉, 명령어를 해석하고 실행에 대한 흐름을 제어하는 역할을 한다.

  • 명령어 인출(fetch)
  • 명령어 해석(decode)
  • 명령어 실행(execute)
  • 결과 저장(write back)

산술 논리 장치

산술 논리 장치(Arithmetic and Logic Unit, ALU)는 말 그대로 연산을 담당한다. 연산은 크게 산술 연산과 논리 연산으로 나뉜다. 산술 연산은 덧셈, 뺄셈, 곱셈, 나눗셈의 사칙 연산을, 논리 연산은 AND, OR, XOR, NOT 등과 같은 논리 값들 사이의 연산을 의미한다.

 

레지스터

레지스터(register)는 CPU 내에 있는 매우 빠른 데이터 저장소이다. 레지스터는 고속의 데이터 저장 장치로서 CPU가 처리하는 명령어에 필요한 데이터나 중간 결과를 일시적으로 저장하기 위해 사용된다.

 

레지스터의 종류

  • 프로그램 카운터
  • 명령어 레지스터
  • 메모리 주소 레지스터
  • 메모리 버퍼 레지스터
  • 누산기
 

CPU의 작동

기본적인 컴퓨터 구조 오늘날의 컴퓨터는 대부분 폰노이만 구조를 따른다. 폰노이만 구조는 CPU, 메모리, 입출력장치, 저장장치가 버스로 연결되어 있는 구조를 말한다. 이 구조가 등장하기 이전

jettstream.tistory.com

명령어 사이클

명령어 사이클(Instruction cycle)은 CPU가 프로그램 내 명령어를 처리하는 단계를 의미한다. CPU가 명령어를 가져오고 해석하고 실행하는 과정을 통칭하며, 이 과정은 프로그램이 실행되는 동안 계속 반복된다.

  • 인출 사이클(fetch cycle)
  • 실행 사이클(execute cycle)
  • 간접 사이클(indirect cycle)
  • 인터럽트 사이클(interrupt cycle)

인터럽트

인터럽트(interrupt)는 CPU가 현재 실행 중인 프로세스 또는 작업을 일시 중지하고, 긴급하게 처리해야 할 예외 사항을 우선 처리한 후, 이전 작업으로 복귀하는 메커니즘을 말한다.

  • 하드웨어 인터럽트(Hardware Interrupt) : 키보드 입력, 마우스 클릭, 이메일 도착등과 같이 외부 장치와 통신 시 발생
  • 소프트웨어 인터럽트(Software Interrupt) : 프로그램 내부에서 발생하며, 대개 특정 작업을 요청하기 위해 소프트웨어가 의도적으로 발생시키는 인터럽트, (예를 들어 0으로 나누기, 유효하지 않은 명령어 실행 등)

하드웨어 측면에서 주기억 장치란 무엇인가요?

메모리 계층 구조

컴퓨터에서 사용하는 여러 메모리 종류는 사다리처럼 계층 구조로 표현할 수 있다. 즉, 메모리 계층 구조는 다양한 유형의 데이터 저장 매체를 포함하며, 속도가 가장 빠른 레지스터부터 가장 느린 보조기억 장치까지 여러 단계로 나뉜다.

캐시 메모리(cache memory)는 CPU 내부에 해당하는 영역에 위치한 고속 메모리로, 레지스터보다는 느리지만 주기억 장치보다는 빠르다. L1, L2, L3 등 다양한 유형의 캐시가 있으며, L1이 가장 빠르고 L3가 가장 느리다.

 

주기억 장치는 프로세스가 실행되는 동안 필요한 데이터와 프로그램을 저장한다.

 

주기억 장치

일반적으로 CPU는 명령어/데이터가 필요하면 캐시 메모리에서 찾는다. 그런데 CPU가 주기억 장치와 직접 통신하는 경우가 있다. 바로 CPU가 찾는 데이터가 캐시 메모리에 없을 때다. 이때는 CPU가 주기억 장치에서 직접 데이터를 가져오고 동시에 캐시 메모리에 적재한다. 주기억 장치는 CPU가 직접 접근할 수 있는 메모리로, 실행 중인 프로그램의 코드와 데이터가 저장되어 있다.

주기억 장치의 유형

휘발성 메모리는 말 그대로 전원 공급이 중단되면 저장한 데이터가 사라진다. 휘발성 메모리 기술은 DRAM과 SRAM으로 시작되었으며, 둘의 차이는 아래의 링크에서 확인이 가능하다.

  • SRAM
  • DRAM
 

SRAM과 DRAM에 대하여

RAM이란 무엇인가? RAM이란 Random Access Memory의 줄임말로 프로그램이 실행되는 동안 필요한 데이터를 저장하는 컴퓨터 장치이다. R저장된 데이터를 순차적이 아닌 임의의 순서로 액세스 할 수 있다.

jettstream.tistory.com

논리 주소와 물리 주소

컴퓨터 메모리 관리에 사용되는 주소 유형에는 두 가지가 있다. 바로 논리주소와 물리주소이다.

논리주소(Logical address, 혹은 가상주소(Virtual address))는 프로세스에 의해 사용되는 주소이다. 즉, 프로세스가 생성되고 실행될 때 사용한다. 반면에 물리주소(Physical address)는 주기억 장치 위치를 나타내는 주소이다.

 

논리주소는 실제 주기억 장치에 접근하기 위해 메모리 관리 유닛(Memory Management Unit, 이하 MMU)이라고 하는 하드웨어를 통해 물리주소로 변환된다. 이를 '주소 변환(Address translation)'이라고 부른다.

 

논리 주소에서 물리주소로 변환하는 과정

  1. 프로세스가 주기억 장치에 접근하려 할 때, 논리주소가 생성된다.
  2.  MMU는 페이지 테이블을 참조하여 논리주소를 물리주소로 변환한다. 페이지 테이블은 논리주소와 물리주소가 매핑된 정보를 가지고 있다. 이 테이블을 통해 논리주소를 물리주수로 변환한다.
  3. 변환된 물리주소를 이용해서 실제 주기억장치에 접근한다.

해당 과정을 통해서 프로세스에 필요한 주기억 장치를 간편하게 관리할 수 있다.

MMU

MMU는 하드웨어 장치로, CPU와 주기억 장치 사이에 위치하며(정확히는 CPU 내에 위치), 논리주소를 물리주소로 변환하는 기능을 수행한다.

  • 주소 변환(Address translation) : 프로그램이 사용하는 논리주소를 물리주소로 변환
  • 메모리 보호(Memory Protection) : 프로세스가 할당받지 않은 메모리 영역에 접근하는 것을 방지
  • 캐싱(Caching) : TLB(Translation Lookaside Buffer)를 이용하여 최근 또는 자주 사용되는 주소를 버퍼에 저장했다가 사용함으로써 주소를 빠르게 변환하도록 함

정리하자면

컴퓨터 구조와 운영체제는 공부를 아무리 많이 해도 끝이 없다. 생각해 보면 알아야 하는 양 자체가 많다. 하지만 긍정적인 부분은 컴퓨터의 기본이 되는 밑바닥은 시간이 흘러도 크게 변하지 않는다는 것이다. 공부해서 제대로 익혀두면 프로그래밍이나 관련 업무를 진행할 때 두고두고 큰 도움이 될 것이다.

 

다행히도 해당 책은 다소 딱딱하게 느낄 수 있는 컴퓨터 이론에 대해서 깔끔한 그림들과 쉬운 설명으로 이해를 돕는다. 책장에 꽂아두고 기억이 가물가물해질 때마다 찾아보려고 한다.

 

 

컴퓨터 구조와 운영체제 핵심 노트 - 예스24

면접, 취업 대비 & 기사, 기술사 시험 대비 & 전공지식의 빈틈을 채우자!컴퓨터 구조와 운영체제를 이 책 한 권으로, 빠르게, 핵심 위주로!IT 분야 입문이나 취업을 위해 빠르게 핵심 내용을 익혀

www.yes24.com

본 리뷰는 업체로부터 도서를 제공받아 읽어보고 객관적으로 작성한 리뷰입니다.

댓글