운영체제 (1) - 운영체제와 컴퓨터 하드웨어

kicdev·2025년 10월 23일

운영체제 공부

목록 보기
1/1

운영체제란?

  • 컴퓨터에 포함된 CPU나 메모리, 입출력 기기 등이 사용자의 기대에 맞게 역할을 수행할 수 있도록 도와주는 시스템 소프트웨어
  • 플랫폼 소프트웨어라고도 불림
  • 목적에 따라 유형이 달라, 종류가 매우 다양

운영체제의 역할

  1. 프로세스 관리
    • 프로세스란, 실행중인 프로그램
    • 다른 프로세스들과 충돌 없게 함
    • 메모리 공간, 데이터 자원을 알맞게 제공
  2. 메모리 관리
    • 파일, 프로그램, 데이터 저장
    • 사용자가 사용할 다양한 데이터들을 메모리에 배치
  3. 파일 시스템 관리
    • 디렉토리 -> 폴더 -> 파일 형태의 관리체계 제공 (통칭 File System)

운영체제의 구조

커널

  • 운영체제의 핵심은 커널(kernel)!
  • 커널이 운영체제의 기능을 담당
  • 사용자가 직접 접근할 수 없음
  • 커널의 기능을 사용시, CLI 또는 GUI를 통해 요청 가능

시스템 콜 (System Call)

  • 응용프로그램이 컴퓨터 자원에 접근할 때, 위험성 없이 작업을 실행해주는 응용프로그램과 커널 사이의 인터페이스
  • 커널에서 정해준 함수만 사용 가능

드라이버

  • 그래픽카드, USB, 메모리 등 외부기기의 기능을 운영체제가 사용하기 위해 외부기기의 제조사가 만든 인터페이스

컴퓨터 하드웨어 구성

CPU (중앙처리장치)

  • 컴퓨터 내에서 주요 연산을 담당
  • 사람의 뇌와 같은 부위이기에, 세부 부분이 존재

ALU (산술논리연산장치)

  • 산술(더하기), 논리 (AND, OR, NOT) 연산을 담당

CU (제어장치)

  • ALU가 연산을 하기위해 필요한 동작과 내용을 해석해서 전달

레지스터

  • CPU 내에서 사용하는 아주 작은 크기의 메모리

주요 레지스터들

  1. 프로그램 카운터 (Program Counter, PC)
    • 메모리에서 가져와 사용할 다음 명령어의 주소를 일시적으로 보관
  2. 인스트럭션 레지스터 (Instruction Register, IR)
    • PC에서 읽어온 주소의 명령어를 해석
  3. 메모리 어드레스 레지스터 (Memory Address Register, MAR)
    • 메모리의 주소를 저장, 어드레스 버스로 보낼 때 사용
  4. 메모리 버퍼 레지스터 (Memory Buffer Register, MBR)
    • 읽고 쓸 메모리의 내용을 저장, 대기하는 과정에서 버퍼링 필요
  5. 플래그 레지스터 (Flag Register, FR)
    • 연산 결과, CPU 상태에 대한 부가적인 정보를 저장
  6. 스택 포인터 (Stack Pointer, SP)
    • 스택의 맨 위를 가리킴
    • 스택이란, 지역변수나 매개변수를 저장하기 위해 사용하는 메모리의 영역
    • 해당 메모리에서 다음 데이터에 대한 정보를 가리킴

추가적으로 컴퓨터 동작을 이해하기 위한 내용

클럭 펄스 (Clock Pulse)

  • CPU를 구성하는 요소들에게 제공되는 규칙적인 신호
  • CPU는 이 신호에 맞춰 작업을 수행
  • 컴퓨터가 동작할 수 있는 동기화 시간을 제공하기 위해 필요

왜 컴퓨터는 클럭 펄스에 맞춰 일을 해야하나?

  • 시스템 동기화를 목적으로 함
  • CPU 내부에는 수많은 논리 회로가 있고, 각각의 회로는 전기 신호 수신 후 안정화 시간이 필요함
  • 안정화 후 다음 단계로 넘어갈 때, 클럭 펄스가 없다면 회로마다 다른 속도로 움직여 명령어의 실행 순서가 꼬이거나, 잘못된 데이터가 전달될 위험에 노출

폰 노이만 구조

  • 기존에는 연산을 할 때마다 회로나 스위치 변경 필요
  • 폰 노이만 구조는 CPU와 메모리는 컴퓨터의 부품으로 장착
  • 그 사이를 버스 시스템으로 연결

프로그램의 실행 과정


1. 사람이 프로그래밍 언어를 이용해 작성한 파일 작성
2. 그런 프로그램 코드를 기계 친화적인 어셈블리 코드로 변환
3. 실행 이전에 어셈블리 코드가 바이너리 코드(0과 1로 구성)로 변환

1. 실행파일이 만들어지고, 보조기억장치에 저장됨
2. 이 파일을 실행하면 주기억장치에 로딩되어 올라감
3. CPU에 의해 명령어들이 순차적으로 실행 (그림에서 명령어 1, 2, 3 순서)

  • 명령어들은 메모리가 아닌, CPU 내에서 실행됨
  • Fetch
    • 메모리 위에 존재하는 명령어를 CPU로 가져오는 작업
    • 이렇게 이동된 명령어를 저장하기 위해 IR을 이용
  • Decode
    • 가져온 명령어를 CPU가 해석하는 단계 (CU가 담당)
  • Execution
    • CU가 해석한 명령어를 ALU가 수행

데이터의 이동

  • 데이터 버스 : 데이터 이동
  • 컨트롤 버스 : 메모리에 CPU의 명령어를 전달
  • 어드레스 버스 : 주소값 참조

인터럽트

  • CPU가 어떤 작업을 수행할 때 작업을 방해하는 신호
  • 부정적인 뜻의 방해가 아닌, 우선적으로 처리해야 하는 다른 작업의 신호

인터럽트의 종류

  • CPU 인터럽트
    • 정상적으로 수행할 수 없는 명령어가 입력될 때
    • 이런 인터럽트를 '동기 인터럽트', '예외'라고도 부름
      예)
      1. 웹 크롤링을 위해 requests 모듈 없이 작업 수행
      2. 파일을 찾을 수 없을 때
      3. 수를 0으로 나누려 할 때
  • 하드웨어 인터럽트
    • 입출력 장치(키보드, 마우스 등)로 부터 발생하는 인터럽트
    • '비동기 인터럽트'라고도 부름
      대표적인 예)
      • 무한루프 중 cntl+c 입력으로 실행 중단

인터럽트 핸들링

  • 인터럽트가 발생하면, 대응하는 무언가가 존재
  • 이를 '인터럽스 서비스 루틴'라고 부름
  • '인터럽스 서비스 루틴'은 미리 정의되어 있는 프로그램 또는 함수
  • 이런 과정을 통틀어 '인터럽스 핸들링'이라고 부름
  • 이런 과정을 도와주는 것이 운영체제의 역할 중 하나

키보드 인터럽트 실습 코드 (Python)

import time
import signal

# 키보드 인터럽트 발생시 실행될 함수 정의
def handler(signum, frame):
    print('\n키보드 인터럽트 감지')
    print(f'신호 번호 : {signum}')
    print(f'스택 프레임 : {frame}')
    exit()

# 운영체제에게 특정 신호를 등록하는 메소드
# SIGINT: 키보드 인터럽트 상수
signal.signal(signal.SIGINT, handler)

while True:
    print('5초 간격으로 실행중...')
    time.sleep(5)
  • 실행화면
profile
언젠가 백엔드 개발자가 되기 위해

0개의 댓글