Skip to main content

혼자 공부하는 컴퓨터 구조 + 운영체제

아래 내용은 혼자 공부하는 컴퓨터구조 + 운영체제를 읽고 정리한 내용입니다.

  • 명령어는 연산 코드와 오퍼랜드로 구성됩니다.
  • 연산 코드는 명령어가 수행할 연산을 의미합니다.
  • 오퍼랜드는 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 의미합니다.
  • 주소 지정 방식은 연산에 사용할 데이터 위치를 찾는 방법입니다.

  • ALU는 레지스터로부터 피연산자를 받아들이고, 제어장치로부터 제어 신호를 받아들입니다.
  • ALU는 연산 결과와 플래그를 내보냅니다.
  • 제어장치는 클럭, 현재 수행할 명령어, 플래그, 제어 신호를 받아들입니다.
  • 제어장치는 CPU 내부와 외부로 제어 신호를 내보냅니다.

  • 프로그램 카운터는 메모리에서 가져올 명령어의 주소, 명령어 레지스터는 해석할 명령어를 저장합니다.
  • 메모리 주소 레지스터는 메모리의 주소, 메모리 버퍼 레지스터는 메모리와 주고받을 데이터를 저장합니다.
  • 범용 레지스터는 데이터와 주소를 모두 저장하고, 플래그 레지스터는 연산 결과 혹은 CPU 상태에 대한 부가 정보를 저장합니다.
  • 스택 포인터는 스택 최상단의 위치를 저장합니다.
  • 베이스 레지스터에 저장된 주소는 기준 주소로서의 역할을 합니다.

  • 명령어 사이클은 하나의 명령어가 처리되는 주기로, 인출, 실행, 간접, 인터럽트 사이클로 구성되어 있습니다.
  • 인터럽트는 CPU의 정상적인 작업을 방해하는 신호입니다.
  • 인터럽트의 종류에는 예외와 하드웨어 인터럽트가 있습니다.
  • 인터럽트 서비스 루틴은 인터럽트를 처리하기 위한 동작들로 이루어진 프로그램입니다.

  • 클럭 속도가 높은 CPU는 빠르게 작동합니다.
  • 코어란 CPU 내에서 명령어를 실행하는 부품입니다.
  • 멀티코어 프로세서란 여러 개의 코어를 포함하는 CPU를 말합니다.
  • 스레드에는 하드웨어적 스레드와 소프트웨어적 스레드가 있습니다.
  • 멀티스레드 프로세서란 하나의 코어로 여러 개의 명령어를 동시에 실행할 수 있는 CPU를 말합니다.

  • 명령어 파이프라이닝은 동시에 여러 개의 명령어를 겹쳐 실행하는 기법입니다.
  • 슈퍼스칼라는 여러 개의 명령어 파이프라인을 두는 기법입니다
  • 비순차적 명령어 처리 기법은 파이프라인의 중단을 방지하기 위해 명령어를 순차적으로 처리하지 않는 기법입니다.

  • ISA(Instruction Set Architecture)는 CPU의 언어이자 하드웨어가 소프트웨어를 어떻게 이해할지에 대한 약속입니다.
  • CISC(Complex Instruction Set Computer)는 복잡하고 다양한 종류의 가변 길이 명령어 집합을 활용합니다.
    • 프로그램을 이루는 명령어의 수가 적음
    • 여러 클럭에 걸쳐 명령어 수행
    • 파이프라이닝하기 어려움
    • 인텔
  • RISC(Reduced Instruction Set Computer)는 단순하고 적은 종류의 고정 길이 명령어 집합을 활용합니다.
    • 프로그램을 이루는 명령어의 수가 많음
    • 1클럭 내외로 명령어 수행
    • 파이프라이닝하기 쉬움
    • ARM 아키텍처
    • 메모리 절약

  • RAM은 휘발성 저장 장치이고, 보조기억장치는 비휘발성 저장 장치입니다.
  • DRAM은 시간이 지나면 저장된 데이터가 점차 사라지는 RAM이고, SRAM은 시간이 지나도 저장된 데이터가 사라지지 않은 RAM입니다.
  • SDRAM은 클럭과 동기화된 DRAM입니다.
  • DDR SDRAM은 SDR SDRAM에 비해 대역폭이 두 배 넓습니다.

  • 물리 주소는 메모리 하드웨어상의 주소이고, 논리 주소는 CPU와 실행 중인 프로그램이 사용하는 주소입니다.
  • MMU는 논리 주소를 물리 주소로 변환합니다.
  • 베이스 레지스터는 프로그램의 첫 물리 주소를 저장합니다.
  • 한계 레지스터는 실행 중인 프로그램의 논리 주소의 최대 크기를 저장합니다.

  • 저장 장치 계층 구조는 각기 다른 용량과 성능의 저장 장치들을 계층화하여 표현한 구조입니다.
  • 캐시 메모리는 CPU의 연산 속도와 메모리 접근 속도의 차이를 줄이기 위한 저장 장치입니다.
  • 캐시 적중률이 높으면 CPU의 메모리 접근 횟수를 줄일 수 있습니다.
  • 캐시 메모리는 참조 지역성의 원리(시간 지역성, 공간 지역성)에 따라 데이터를 예측하여 캐시 적중률을 높입니다.

  • 하드 디스크의 구성 요소는 플래터, 스핀들, 헤드, 디스크 암이 있습니다.
  • 플래터는 트랙과 섹터로 나뉘고, 여러 플래터의 동일한 트랙이 모여 실린더를 이룹니다.
  • 하드 디스크의 데이터 접근 시간은 크게 탐색 시간, 회전 지연, 전송 시간으로 나뉩니다.
  • 플래시 메모리는 한 셀에 몇 비트를 저장할 수 있느냐에 따라 SLC, MLC, TLC로 나뉩니다.
  • 플래시 메모리의 읽기와 쓰기는 페이지 단위로, 삭제는 블록 단위로 이루어집니다.

  • RAID란 데이터의 안전성 혹은 높은 성능을 위해 여러 하드 디스크나 SSD를 마치 하나의 장치처럼 사용하는 기술입니다.
  • RAID 0은 데이터를 단순히 병렬로 분산하여 저장하고, RAID 1은 완전한 복사본을 만듭니다.
  • RAID 4는 패리티를 저장한 장치를 따로 두는 방식이고, RAID 5는 패리티를 분산하여 저장하는 방식입니다.
  • RAID 6는 서로 다른 두 개의 패리티를 두는 방식입니다.

  • 입출력장치는 장치 컨트롤러를 통해 컴퓨터 내부와 정보를 주고 받습니다.
  • 보조기억장치가 컴퓨터 내부와 정보를 주고받는 방식은 입출력장치와 크게 다르지 않습니다.
  • 장치 드라이버는 장치 컨트롤러가 컴퓨터 내부와 정보를 주고받을 수 있게 하는 프로그램입니다.

  • 프로그램 입출력은 프로그램 속 명령어로 입출력 작업을 하는 방식입니다.
    • CPU가 장치 컨트롤러의 내부 레지스터(데이터 레지스터, 상태 레지스터, 제어 레지스터)를 알 수 있는 방법은 아래와 같이 2가지가 존재합니다.
    • 메모리 맵 입출력은 메모리에 접근하기 위한 주소 공간과 입출력 장치에 접근하기 위한 주소 공간을 하나의 주소 공간으로 간주하는 입출력 방식입니다.
    • 고립형 입출력은 메모리에 접근하기 위한 주소 공간과 입출력장치에 접근하기 위한 주소 공간을 별도로 분리하는 입출력 방식입니다.
  • 인터럽트 기반 입출력은 인터럽트로써 입출력을 수행하는 방법입니다.
  • DMA 입출력은 CPU를 거치지 않고 메모리와 입출력장치 간의 데이터를 주고받는 입출력 방식입니다.
  • 입출력 버스는 입출력장치와 컴퓨터 내부를 연결 짓는 통로로, 입출력 작업 과정에서 시스템 버스 사용 횟수를 줄여줍니다.

  • 커널은 운영체제의 핵심 기능을 담당합니다.
  • 이중 모드는 CPU가 명령어를 실행하는 모드를 커널 모드와 사용자 모드로 구분하는 방식입니다.
  • 시스템 호출은 운영체제의 서비스를 제공받기 위해 커널 모드로 전환하는 방법입니다.
  • 대표적인 운영체제 서비스로 프로세스 관리, 자원 접근 및 할당, 파일 시스템 관리가 있습니다.
  • 프로세스는 실행 중인 프로그램입니다. 프로세스의 종류에는 포그라운드 프로세스와 백그라운드 프로세스(유닉스 - 데몬, 윈도우 - 서비스)가 있습니다.
  • 운영체제는 프로세스 제어 블록(PCB)을 통해 여러 프로세스를 관리합니다.
  • 프로세스 간에 실행을 전환하는 것을 문맥 교환이라고 합니다.
  • 프로세스 사용자 영역에 크게 코드 영역, 데이터 영역, 스택 영역, 힙 영역으로 나뉘어 배치됩니다.
  • 프로세스 상태에는 생성, 준비, 실행, 대기, 종료가 있습니다.
  • 프로세스가 다른 프로세스를 생성한 경우 프로세스를 생성한 프로세스를 부모 프로세스, 생성된 프로세스를 자식 프로세스라고 부릅니다.
  • 많은 운영체제는 프로세스가 프로세스를 낳는 프로세스 계층 구조로 프로세스들을 관리합니다.
  • 스레드는 프로세스 내의 실행 흐름 단위입니다.
  • 여러 프로세스를 동시에 실행하는 것을 멀티프로세스라고 하고, 여러 스레드로 프로세스를 동시에 실행하는 것을 멀티스레드라고 합니다.

  • CPU 스케줄링은 공정하고 합리적으로 CPU 자원을 배분하는 방법을 의미합니다.
  • 프로세스는 우선순위를 가지고 있고, 이는 PCB에 명시됩니다.
  • 운영체제는 효율적인 스케줄링을 위해 스케줄링 큐를 사용합니다.
  • 준비 큐는 CPU 할당을 기다리는 프로세스들을 위한 큐를 의미합니다.
  • 대기 큐는 입출력장치를 기다리는 프로세스들을 위한 큐를 의미합니다.
  • 선점형 스케줄링은 프로세스가 이용 중인 자원을 빼앗을 수 있습니다.
  • 비선점형 스케줄링은 프로세스가 이용 중인 자원을 빼앗을 수 없습니다.
  • 선입 선처리 스케줄링 알고리즘은 준비 큐에 삽입된 순서대로 CPU를 할당합니다.
  • 최단 작업 우선 스케줄링 알고리즘은 준비 큐에 삽입된 프로세스들 중 CPU 사용 시간의 길이가 가장 짧은 프로세스부터 CPU를 할당합니다.
  • 라운드 로빈 스케줄링 알고리즘은 정해진 시간만큼만 돌아가며 CPU를 할당합니다.
  • 우선순위 스케줄링 알고리즘은 가장 높은 우선순위를 가진 프로세스에 CPU를 할당합니다.
  • 다단계 피드백 큐 스케줄링 알고리즘은 프로세스들이 큐 사이를 이동할 수 있는 다단계 큐 스케줄링입니다.

  • 동기화는 특정 자원에 접근할 때 한 개의 프로세스만 접근하게 하거나 프로세스를 올바른 순서대로 실행하게 하는 것을 의미합니다.
  • 공유 자원은 공동으로 사용하는 자원으로, 전역 변수가 될 수도 있고, 파일이 될 수도 있고, 입출력장치, 보조기억장치가 될 수도 있습니다.
  • 임계 구역은 공유 자원에 접근하는 코드 중 동시에 실행하면 문제가 발생하는 코드 영역을 의미합니다. 임계 구역에 진입한 프로세스가 있다면 다른 프로세스는 임계 구역 밖에서 기다려야 합니다.
  • 상호 배제는 한 프로세스가 임계 구역에서 작업 중이면 다른 프로세스가 임계 구역에 들어갈 수 없도록 제어하는 것입니다.
  • 뮤텍스 락은 임계 구역을 잠금으로써 프로세스 간의 상호 배제를 이룹니다.
  • 세마포는 공유 자원이 여러 개 있는 임계 구역 문제도 해결할 수 있는 동기화 도구입니다.
  • 모니터는 세마포에 비해 사용자가 사용하기 편리한 동기화 도구로 조건 변수를 사용합니다.

  • 교착 상태는 일어나지 않을 사건을 기다리며 무한히 대기하는 현상을 의미합니다.
  • 식사하는 철학자 문제는 교착 상태의 발생을 보여 주는 예시입니다.
  • 자원 할당 그래프를 이용해 교착 상태를 표현할 수 있습니다.
  • 교착 상태 발생 조건은 상호 배제, 점유와 대기, 비선점, 원형 대기입니다.
  • 교착 상태 예방은 교착 상태의 발생 조건 중 하나를 충족하지 못하게 하는 방법입니다.
  • 교착 상태 회피는 안전 상태를 유지할 수 있는 경우에만 자원을 할당하는 방법입니다.
  • 교착 상태 검출 후 회복은 교착 상태 발생 여부를 주기적으로 검사하고, 교착 상태가 발생하면 그때그때 회복하는 방식입니다.

  • 스와핑은 메모리에서 사용되지 않는 일부 프로세스를 보조기억장치로 내보내고 실행할 프로세스를 메모리로 들여보내는 메모리 관리 기법입니다.
  • 프로세스를 메모리에 연속적으로 할당하는 방식은 두 가지 문제를 내포하고 있습니다. 한 가지는 외부단편화이고, 또 하나는 물리 메모리보다 큰 프로세스를 실행할 수 없다는 점입니다.
  • 가상 메모리(virtual memory)는 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술입니다.
  • 이를 가능케 하는 기법으로 페이징이 있으며 페이징은 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법입니다.
  • 페이징은 외부 단편화 문제를 해결할 수 있지만, 내부 단편화라는 문제를 야기할 수 있습니다. 페이징은 프로세스의 논리 주소 공간을 페이지라는 일정한 크기 단위로 자르는데 모든 프로세스가 페이지 크기에 딱 맞게 잘리는 것이 아니며 가령 페이지 크기가 10KB인데, 프로세스의 크기가 108KB라고 한다면 마지막 페이지는 2KB만큼의 크기가 남으며 이러한 메모리 낭비를 내부 단편화라고 합니다.
  • 최초 적합 방식은 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식입니다.
  • 최적 적합 방식은 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식입니다.
  • 최악 적합 방식은 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식입니다.
  • 외부 단편화는 프로세스를 할당하기 어려울 만큼 작은 메모리 공간들로 인해 메모리가 낭비되는 현상을 의미합니다.
  • 페이징은 물리 주소 공간을 프레임 단위로 자르고 프로세스의 논리 주소 공간을 페이지 단위로 자른 뒤 각 페이지를 프레임에 할당하는 가상 메모리 관리 기법입니다.
  • 페이지 테이블을 통해 페이지가 적재된 프레임을 찾을 수 있습니다. 페이지 테이블에는 페이지 번호와 프레임 번호뿐 아니라 유효 비트, 보호 비트, 접근 비트, 수정 비트 등이 있습니다.
  • PTBR(페이지 테이블 베이스 레지스터)은 각 프로세스의 페이지 테이블이 적재된 주소를 가리킵니다.
  • TLB(Translation Lookaside Buffer)는 페이지 테이블의 캐시 메모리 역할을 수행하기 위해 페이지 테이블의 일부를 저장합니다.
  • 요구 페이징은 페이지가 필요할 때에만 메모리에 적재하는 기법입니다.
  • 페이지 교체 알고리즘에는 FIFO, 최적(이론상), LRU 페이지 교체 알고리즘 등이 있습니다.
  • 스래싱이란 지나치게 빈번한 페이지 교체로 인해 CPU 이용률이 낮아지는 문제를 뜻합니다.
  • 프레임 할당 방식에는 균등 할당과 비례 할당, 작업 집합 모델 기반과 페이지 폴트율 기반 프레임 할당 방식이 있습니다.
  • 정적 방식 - 균등 할당, 비례 할당, 동적 방식(프로세스 실행) - 작업 집합 모델, 페이지 폴트율 기반

  • 파티셔닝은 하드 디스크나 SSD처럼 용량이 큰 저장 장치를 하나 이상의 논리적인 여러 단위로 구획하는 작업을 의미합니다.
  • 포매팅이란 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 수 있게 하는 작업을 의미합니다.
  • 연속 할당은 보조기억장치 내 연속적인 블록에 파일을 할당하는 방식입니다.
  • 연결 할당은 각 블록 일부에 다음 블록의 주소를 저장하여 블록들을 연결 리스트 형태로 관리하는 방식입니다. (FAT)
  • 색인 할당은 파일의 모든 블록 주소를 색인 블록에 모아 관리하는 방식입니다. (유닉스)
  • 불연속 할당 - 연결 할당, 색인 할당
  • FAT 파일 시스템은 FAT(File Allocation Table)를 이용하는 연결 할당 기반의 파일 시스템입니다.
  • 유닉스 파일 시스템은 i-node를 이용하는 색인 할당 기반의 파일 시스템입니다.