공부 기록/운영체제

컴퓨터 시스템과 운영체제

도도히히 2025. 11. 9. 15:04

1. 컴퓨터 시스템과 하드웨어

컴퓨터 시스템의 범위

컴퓨터 시스템의 계층

  • 응용프로그램 층
  • 운영체제 층
  • 컴퓨터 하드웨어 층

컴퓨터 시스템 계층 구조의 특징

  • 사용자는 응용프로그램과 GUI/도구프로그램(툴/유틸리티)을 통해 컴퓨터 활용
  • 사용자나 응용프로그램의 하드웨어에 대한 직접 접근 불허 (반드시 운영체제를 통해서만 접근 가능)
  • 하드웨어는 모두 운영체제의 배타적 & 독점적 지배 받음

계층 구조로 보는 운영체제의 기능

  • 사용자가 하드웨어에 대해 몰라도 컴퓨터를 사용할 수 있도록 함
  • 응용프로그램과 하드웨어 사이의 중계

 

컴퓨터 하드웨어 설명

 

CPU

  • 프로그램 코드(기계 명령)를 해석하여 실행하는 중앙처리장치
  • 컴퓨터의 가장 핵심 장치
  • 전원이 공급될 때 작동 시작

RAM

  • CPU에 의해 실행되는 프로그램 코드와 데이터가 적재되는 공간
  • 프로그램은 실행되기 위해 반드시 메모리에 적재되어야 함

캐시 메모리

  • 배경
    • CPU의 처리 속도가 메모리 속도에 비해 빠르게 향상 → 느린 메모리 때문에 CPU의 대기 시간이 늘게 됨
    • CPU의 프로그램 실행 속도를 높이기 위해, CPU와 메모리 사이에 소량의 빠른 메모리를 설치
  • 온칩 캐시 - CPU 내부에 설치되는 캐시
  • 옵칩 캐시 - CPU 외부에 설치되는 캐시
  • 캐시 메모리가 있는 경우 CPU는 캐시 메모리에서만 프로그램 실행(캐시메모리 우선)
    • 실행하고자 하는 프로그램과 데이터는 메모리에 먼저 적재되고 다시 캐시로 옮겨져야 함
    • 캐시는 용량이 작기 때문에 현재 실행할 코드와 데이터의 극히 일부만 저장
    • 주 메모리(RAM)를 배제하는 것이 아님 (주 메모리와 캐시 메모리를 함께 사용하되, 우선순위를 캐시메모리를 더 높게 생각하는 것)

Cache hit vs Cache miss

캐시 히트: CPU가 요청한 데이터가 캐시 메모리에 이미 저장된 상태일 때

캐시 미스: CPU가 요청한 데이터가 캐시 메모리에 없을 때 (이때, 메인 메모리에 접근해야 함)

캐시 미스가 많을 수록 CPU 성능 저하

캐시 사용의 효율성, 비효율성이 알고리즘의 성능에 영향을 미침

  • 비연속적인 메모리 접근 → 캐시 미스 발생
  • 연속적인 메모리 접근 → 캐시 히트 발생

장치 

  • 키보드, 프린터, 스캐너 등

버스

  • 0과 1의 디지털 신호가 지나가는 여러 가닥의 선을 다발로 묶어 부르는 용어
  • 비유
    • 컴퓨터의 버스: 도로
    • 컴퓨터의 데이터: 도로에 다니는 자동차
  • 버스의 종류 (지나다니는 정보에 따라)
    • 주소 버스 - 주소 신호가 지나다니는 버스
      • 주소
        • 메모리, 입출력 장치나 저장 장치 내에 있는 저장소에 대한 번지
        • 0번지에서 시작하는 양수
        • 주소 버스는 주소 값이 전달되는 여러 선의 다발
        • CPU는 메모리나 입출력 장치에 값을 쓰거나 읽을 때 반드시 주소를 발생시킴
    • 데이터 버스 - 데이터 신호가 지나다니는 버스
    • 제어 버스 - 제어 신호가 지나다니는 버스

목적에 따라 버스 구분

  • 시스템 버스
    • CPU, 캐시 메모리, 메모리 등 빠른 하드웨어들 사이에 데이터 전송
    • 고속도로에 비유
  • 입출력 버스(I/O bus)
    • 상대적으로 느린 입출력 장치들로부터 입출력 데이터 전송
    • 일반 도로에 비유
  • 시스템/입출력 버스 모두 주소, 데이터, 제어 버스로 구성

 

I/O controllers & control circuit (입출력 제어 장치 및 시스템 제어 회로)

  • 입출력 장치들을 제어하기 위한 여러 하드웨어
    • 입출력 장치에게 명령 하달
    • 메모리와 입출력 장치 사이에 또는 CPU와 입출력 장치 사이에 데이터 전달 중계
  • Ex)
    • DMAC: CPU 개입없이 입출력 장치와 메모리 사이의 데이터 전송
    • 인터럽트 제어장치: 장치들이 입출력을 완료하였을 때 발생시키는 인터럽트 신호를 받아 CPU에 전달

CPU는 메인 메모리로컬 버퍼 사이에 데이터를 운반

인터럽트 신호가 발생함으로써 데이터 운반이 종료됐음을 알림

 

Direct Memory Access (DMA)

  • CPU에 가해지는 인터럽트 수를 줄이기 위해 로컬 버퍼와 메모리 사이에 운반되는 데이터 단위를 블럭 단위로 함
  • 블럭의 크기는 달라질 수 있음
  • 인터럽트 수가 줄어들면 병렬적으로 수행할 수 있어서 (CPU, I/O 장치 등) 시스템 전반적으로 효율성 증가

32비트 컴퓨터: 32비트 CPU를 가진 컴퓨터

32비트 운영체제: 32비트 주소 체계로 관리되는 운영체제

 

CPU와 메모리의 관계

 

32비트 CPU, 32비트 운영체제, 32비트 컴퓨터란?

  1. CPU에 32개의 주소선이 있음
    • CPU의 액세스 범위: 2^32 개의 서로 다른 주소 (0 ~ 2^32 - 1 번지)
    • CPU가 최대 액세스할 수 있는 메모리의 크기 : 4GB
    • 32비트 CPU를 가진 컴퓨터에 4GB 이상 메모리를 설치할 경우
      • 4GB를 넘어선 영역은 사용할 수 없음
  2. CPU에 입출력되는 32개의 데이터선이 있음
    • 한번에 32비트 읽고 쓰기 가능

cf. 64비트의 경우 2^34GB(약 16TB) 액세스 가능

 

CPU 레지스터와 명령어 사이클

 

주요 레지스터

  • PC(Program Counter) - 다음에 실행할 명령의 메모리 주소 저장 (IP: Instruction Pointer 라고도 함)
  • IR(Instruction Register) - 현재 실행하기 위해 메모리로부터 읽어 온 명령 저장
  • SP(Stack Pointer) - 스택의 톱 메모리 주소 저장 (스택의 현재 위치 추적)
  • 상태 레지스터 - CPU의 상태 정보나 인터럽트 금지 등의 제어 정보 저장
  • 기타

명령어 사이클

  • CPU가 하나의 명령을 실행하는 과정
  • CPU는 전원이 켜진 후 단순하게 명령 사이클 반복

 

명령어 사이클

 

1. IF (명령어 가져오기)

  • PC는 실행할 명령어의 메모리 주소 가리킴
  • CPU는 해당 메모리 위치에서 명령어 얻음

2. Advance IP (PC 업데이트)

  • 명령어를 가져온 뒤 PC를 다음 명령어의 주소로 증가시킴 (PC 또는 IP가 일정 단위로 증가)

3. ID (IR에 저장된 명령어 해독하기)

  • 명령어의 각 비트를 분석하여 어떤 작업을 해야 하고 어떤 자원을 사용해야 하는지 결정

4. OF (피연산자 가져오기)

  • 처리해야 할 데이터를 가져와야 함 (메모리와 레지스터에서 읽어 옴)

5. IE (명령어 실행하기)

  • 명령어가 요구하는 연산 수행
  • ALU에서 사용되며 논리, 산술 연산 수행 (데이터 이동, 곱하기 등)

6. OS (결과 저장하기)

  • 결과를 레지스터나 메모리에 저장
  • 다음 명령어 사이클로 넘어갈 준비

 

ex)

mov eax, [300]; << 메모리 300번지의 값을 읽어 eax 레지스터에 저장

eax: 32비트 크기를 가진 범용 레지스터

 

스택은 어디에 있는가?

프로그램이 실행되기 위해 운영체제에 의해 할당되는 공간

  • 코드 공간: 프로그램 코드 적재
  • 데이터 공간: Global/static/(초기화되지 않은 전역) 변수들이 적재되는 공간
  • 힙 공간: 프로그램에서 동적 할당받는 공간 ( ex. malloc)
  • 스택 공간: 함수가 호출될 때 매개변수, 지역변수, 복귀 주소 등 저장

cf. 복귀 주소: 함수가 끝난 뒤 되돌아갈 주소

 

메모리 레이아웃 (리눅스 프로세스)

(높은 논리 주소~낮은 논리 주소 순서)

stack

  • 상위 논리 주소로부터 하위 주소로 확장
  • 지역 변수, 매개변수, 함수의 복귀 주소

heap

  • bss 상단으로부터 상위 주소로 확장
  • 동적으로 할당한 메모리 영역

bss

  • 초기화되지 않은 전역&정적 변수

data

  • 초기화된 전역&정적 변수

rodata

  • read-only, const type variables(초기화된 이후로 값을 수정할 수 X), strings(문자열)

text

  • 명령어들

 

x86_64 General Purpose Register

Register Accumulator Counter Data Base Stack Pointer Base Pointer Source Destination
64bit RAX RCX RDX RBX RSP RBP RSI RDI
32bit EAX ECX EDX EBX ESP EBP ESI EDI

 

x86_64 Calling Convention

 

Calling convention

  • 정의: 함수호출하는 방식에 대한 표준화규칙, 함수가 호출될 때 어떤 방식으로 매개변수와 반환값이 전달되는지 정의
  • 목적: 서로 다른 컴파일러, 서로 다른 언어로 구현된 코드가 상호작용할 수 있게 됨

x86-64 system V style calling convention

  • 함수의 첫 6개 인자는 기본적으로 부동소수점 숫자가 아닌 경우 다음의 범용 레지스터를 통해 순서대로 전달 : RDI, RSI, RDX, RCX, R8, R9
  • 6번째를 초과하는 인자들은 스택에 삽입 (Right-to-Left 순서) (LIFO 후입선출)

 

컨텍스트(Context)

 

프로그램이 실행 중인 일체의 상황 혹은 상태 정보

  • 메모리
    • 프로그램 코드와 데이터, 스택, 동적 할당 받아 저장한 값
  • CPU 레지스터들의 값
    • PC에는 코드의 주소
    • SP에는 스택의 톱 주소
    • 다른 레지스터이전의 실행 결과현재 실행에 사용되는 데이터

좁은 의미에서의 컨텍스트

  • 메모리에 저장된 상황 정보는 그대로 남아 있음
  • 따라서 현재 CPU에 들어 있는 레지스터의 값들을 컨텍스트라고 할 수 있음

컨텍스트 스위칭

  • 정의
    • 현재 실행중인 프로그램의 컨텍스트(CPU 레지스터들의 값)를 메모리에 저장
    • 새로 실행시킬 프로그램의 저장된 컨텍스트를 CPU에 복귀
  • 발생
    • CPU가 현재 프로그램 실행을 중지하고 다른 프로그램을 실행할 때

 

멀티 코어 CPU

 

2001년 IBM에 의해 PowerPC 라는 멀티코어 CPU 개발

  • CPU 내부에 2개의 프로세서 포함
  • 2개의 프로그램을 동시에 실행
  • 코어는 완벽한 처리기(과거 개념의 CPU)

 

캐시 종류

  • L1 캐시
    • 가장 빠르고 CPU에 가까운 캐시
    • 코어마다 프라이빗하게 독립적으로 존재
    • I-캐시: 명령어, D-캐시: 데이터
    • 파이프라인에서 structural hazard 방지 효과 제공
  • L2 캐시
    • L1 캐시보다 저장공간이 크고 약간 느림
    • 각 코어에 독립적으로 존재
    • L1 캐시에 없는 데이터를 L2 캐시에서 찾게 됨
  • L3 캐시
    • 여러 코어가 공유함
    • L1, L2 캐시보다 용량이 크고 여러 코어가 동시에 접근 가능
    • L1, L2 캐시보다 속도 느림
    • L2 캐시에서 찾지 못한 데이터를 L3 캐시에서 찾음

L1, L2, L3의 계층 구조: CPU가 자주 사용하는 데이터를 더 빠르게 처리 → 성능 극대화

'공부 기록 > 운영체제' 카테고리의 다른 글

컴퓨터 시스템과 운영체제 (3)  (0) 2025.11.09
컴퓨터 시스템과 운영체제 (2)  (0) 2025.11.09