1과목 - 운영체제
운영체제 4대 성능 평가 기준 - 시스템이 주어진 문제를 얼마나 정확하게 해결하는가 : Reliability
운영체제 4대 성능 평가 기준 - 사용자가 필요할 때 시스템을 언제든 바로 사용할 수 있는 정도 : Availability
가상 메모리 관리에서 메모리를 논리적 의미 단위(가변 크기) - 세그멘트로 분할, 외부 단편화가 발생하는 기법 : 세그멘테이션
외부 단편화 : 남아있는 메모리의 크기가 실행하고자 하는 프로세스보다 크지만, 연속적이지 않은 공간에 존재하여 실행하지 못하는 현상

내부 단편화 : Partition의 크기가 프로세스의 크기보다 커서 메모리가 남지만, 다른 프로세스가 사용할 수 없는 상태

UNIX에서 사용자의 명령어를 인식하여 프로그램을 호출하는 명령어 해석기 : Shell
UNIX에서 파일의 이름이 보관되는 곳 : Directory
UNIX에서 기억장치 관리, 입출력 관리 등 하드웨어 제어 핵심 기능을 수행하며, 주기억장치에 상주하는 것 : Kernel
UNIX 파일 시스템 구조 중 부팅 시 필요한 코드가 저장되는 곳 : Boot Block
실시간 운영체제에서 가장 중요한 성능 지표 : 데드라인 준수 (결정론적 수행)
운영체제 전체를 가상화하지 않고, 앱 실행에 필요한 라이브러리만 격리, 패키징하는 기술 : Container, Docker
페이지 부재(Fault)가 너무 잦아, CPU가 프로그램 실행보다 페이지 교체에 더 많은 시간을 쓰는 성능 저하 현상 : 스래싱 Thrashing
프로세스가 실행되는 동안 메모리의 '일부 특정 구역'만 집중적으로 참조하는 성질 : Locality
스래싱을 방지하기 위해 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합을 메모리에 상주시키는 기법 : Working Set
하드웨어 바로 위에서 동작하여 여러 가상 머신(VM)을 제어하는 하이퍼바이저 방식 : Type 1 (Native / Bare-metal)
교착상태 발생 4조건 : Non-preemption, Circular wait, Hold & Wait, Mutual Exclusion
교착상태 해결 기법 중, 발생 가능성을 인정하고 피해 가는 '은행원 알고리즘' : Avoidance 알고리즘
진행 방향에 더 이상 요청이 없으면 끝까지 가지 않고 즉시 방향을 트는 스케줄링 기법 : LOOK / C-LOOK
탐색 시간이 아닌 '디스크 회전 지연 시간(Rotational Latency)'을 최적화하는 기법(섹터 큐잉) : SLTF
현재 헤드 위치에서 가장 '가까운(탐색 거리가 짧은)' 트랙부터 처리하여 기아 상태가 발생할 수 있는 디스크 스케줄링 기법 : SSTF
디스크 헤드가 엘리베이터처럼 양쪽 끝을 왕복하며 진행 방향의 모든 요청을 처리하는 기법 : SCAN
항상 '한쪽 방향'으로만 이동하며 처리하고 끝에 닿으면 반대쪽 끝으로 바로 돌아가 응답 시간 편차를 최소화하는 기법 : C-SCAN
사용자의 신분이나 역할에 따라 자원 접근 권한을 제어하는 보안 모델 3종류 - MAC, DAC, RBAC
관리자가 보안 등급을 부여하고 규칙에 따라 접근을 통제하는 가장 강력한 보안 모델 : MAC (강제적 접근 제어)
데이터 소유자가 접근 권한을 직접 지정하는 사용자 기반 접근 제어 방식 : DAC (임의적 접근 제어)
사용자의 직무나 역할에 따라 권한을 부여하는 효율적인 접근 제어 모델 : RBAC (역할 기반 접근 제어)
공유 데이터와 이를 처리하는 함수를 하나로 묶어 '정보 은폐(캡슐화)'를 수행하며, 외부 프로세스가 내부 데이터를 직접 접근할 수 없는 동기화 기법 : Monitor
multi-programming 에서 오직 하나의 프로세스만 접근할 수 있는 공유 자원 영역 : Critical Section
한 프로세스가 임계 영역을 사용할 때 다른 프로세스가 접근하지 못하게 하는 제어 기법 : Mutual exclusion = mutex
암호화와 복호화에 사용하는 키가 서로 다른 방식의 대표적인 알고리즘 : RSA (비대칭키 암호화)
HRN 스케줄링의 우선순위 계산 공식 = (대기시간 + 서비스시간) / 서비스시간
SJF의 기아 상태(무한 연기)를 보완하기 위해 대기시간과 서비스시간을 모두 고려하는 비선점형 스케줄링 기법 : HRN
페이지 교체 알고리즘 중 가장 '오랫동안' 사용되지 않은 페이지를 교체하는 기법 : LRU
페이지 교체 알고리즘 중 사용 '빈도수(횟수)'가 가장 적은 페이지를 교체하는 기법 : LFU
입출력 처리가 완료되어 대기(Waiting) 상태의 프로세스가 준비(Ready) 상태로 전이되는 과정 : Wake-up
준비(Ready) 상태의 프로세스가 CPU를 할당받아 실행(Running) 상태로 전이되는 과정 : Dispatch
하나의 프로세스 내에 존재하는 실행 단위로, 자신이 속한 프로세스의 자원과 메모리 환경을 '공유'하여 통신 효율을 높이는 것 : Thread
디렉토리 구조 중 하위 디렉토리 및 파일 공유가 가능하나, 삭제 시 '떨어진 포인터(Dangling Pointer)' 문제가 발생할 수 있는 구조 : Acyclic Graph (비순환 그래프)
로더의 기능 중 부프로그램 호출 시 '주소를 연결'해 주는 기능 : Linking
로더의 기능 중 실제 프로그램과 데이터를 주기억장치에 물리적으로 '읽어들이는' 기능 : Loading
로더의 기능 중 실행 프로그램이 적재될 '주기억장치 공간을 확보'하는 기능 : Allocation
로더의 기능 중 할당된 주소에 맞게 '프로그램 내의 주소들을 조정'하는 기능 : Relocation
메모리 상황에 맞게 목적 프로그램의 주소를 변경(재배치)하여 적재하는 로더 : Relocating Loader
기계어 코드를 지정된 절대 번지에만 적재하며, 할당과 연결은 프로그래머가 직접 수행하는 로더 : Absolute Loader
시스템 소프트웨어인 로더(Loader)의 4대 수행 기능 : 할당(Allocation) -> 연결(Linking) -> 재배치(Relocation) -> 적재(Loading)
매크로(Macro)가 처리되는 3단계 : 매크로 정의 -> 매크로 호출 -> 매크로 확장
2-Pass 어셈블러에서 코드를 두 번 읽을 때, Pass 1이 수행하는 가장 핵심적인 역할 : 기호 표 (Symbol Table) 작성
### 2과목 컴퓨터 구조
CPU 내에서 '다음에 실행할 명령어의 번지(주소)'를 기억하는 레지스터 : Program Counter (PC)
CPU 내에서 '현재 실행 중인 명령어'를 기억하는 레지스터 : Instruction Register (IR)
산술 및 논리 연산의 결과를 일시적으로 기억하는 핵심 레지스터 : Accumulator, AC, 누산기
산술 및 논리 연산의 결과를 일시적으로 기억하는 핵심 레지스터 : PSWR (상태 레지스터)
덧셈, 보수 연산, AND, OR, XOR 등의 산술 및 논리 연산을 수행하는 장치 : ALU
명령어 레지스터(IR)에 있는 명령어를 해독하여 제어 신호를 발생시키는 회로 : Instruction Decoder
캐패시터를 사용하며, 일정 주기로 '재충전(Refresh)'이 꼭 필요한 대용량 주기억장치 소자 : DRAM
플립플롭을 사용하며 재충전이 필요 없고 속도가 빨라 '캐시 메모리'로 주로 쓰이는 소자 : SRAM
1K 메모리를 위한 디코더 입력 라인(주소 선)의 개수 : 10개 (2^10 = 1024)
주소가 아닌 '저장된 데이터의 내용'을 이용해 병렬 탐색하는 가장 빠른(비싼) 특수 메모리 : 연관 메모리 (CAM)
메모리를 여러 모듈로 나누어 동시(병렬)에 접근하여 속도를 높이는 기법 : 메모리 인터리빙 (Interleaving)
캐시 메모리 매핑 방식 중 적중률이 가장 높은 방식 : 연관 매핑 (Associative Mapping)
명령어 실행 주기 중 주소를 읽어오는 Indirect 단계가 필요한 주소 지정 방식 : 간접 주소 지정 방식
오퍼랜드 없이 '스택(Stack)'을 이용하여 연산을 수행하는 명령어 형식 : 0-주소 명령어
단일 오퍼랜드 명령어로, '누산기(AC)'를 이용해 연산하고 결과를 다시 누산기에 저장하는 형식 : 1-주소 명령어
2개의 오퍼랜드를 사용하며, 연산 후 결과가 원래의 자료를 덮어쓰는(파괴하는) 형식 : 2-주소 명령어
연산 후에도 원래의 자료가 보존되는, 3개의 오퍼랜드를 사용하는 형식 : 3-주소 명령어
CPU 연산 결과의 상태 정보를 보관하며 분기 명령의 결정 근거가 되는 레지스터 : 상태 레지스터 (status register)
CPU가 데이터를 읽거나 쓸 메모리의 위치 정보를 전달하는 단방향 버스 : Address Bus
CPU, 메모리, 입출력 장치 사이에서 '실제 데이터'를 주고받는 양방향 버스 : Data Bus
플린(Flynn)의 분류 중 '여러' 명령어로 '여러' 데이터를 동시 처리하는 다중 프로세서 구조 : MIMD
플린(Flynn)의 분류 중 '하나'의 명령어로 '여러' 데이터를 처리하는 배열 프로세서 구조 : SIMD
명령어 수가 적고 길이가 고정적이며, 레지스터가 많아 파이프라인 처리에 유리한 프로세서 구조 : RISC
명령어 수가 많고 길이가 가변적이며, 복잡한 연산이 가능해 마이크로프로그램 제어를 사용하는 구조 : CISC
인터럽트 우선순위 판별 방식 중 '하드웨어적'으로 장치들을 직렬 연결하여 확인하는 방식 : Daisy Chain (빠름)
인터럽트 우선순위 판별 방식 중 '소프트웨어적'으로 각 장치를 순차적으로 묻는 방식 : Polling (느림)
인터럽트 발생 시 CPU가 가장 '먼저' 수행해야 하는 필수 작업 : 현재 실행중인 상태 보존 (PC, Register)
CPU 개입 없이 입출력 장치와 메모리가 직접 데이터를 주고받는 고속 전송 방식 : DMA
메모리 주소 공간과 입출력 주소 공간을 함께 사용하여 별도의 입출력 명령어가 필요 없는 방식 : Memory-Mapped I/O
입출력 공간을 분리하여 별도의 입출력 명령(IN, OUT)이 필요하며 메모리 공간 확보에 유리한 방식 : Isolated I/O
채널 종류 중, 여러 개의 '저속' 입출력 장치를 시분할로 제어(바이트 단위 전송)하는 채널 : 멀티플렉서 채널
DMA가 전송을 위해 CPU의 버스 사이클을 잠시 빼앗는 현상 (CPU는 상태 보존 없이 잠시 멈춤) : Cycle Stealing
채널 종류 중, 한 개의 '고속' 입출력 장치를 독점적으로 제어(블록 단위 전송)하는 채널 : 셀렉터 채널
소프트웨어(펌웨어) 방식으로 제어 메모리에 저장하며, 속도는 다소 느리지만 수정이 용이한 방식 : 마이크로프로그램 제어
하드웨어 회로 방식으로 속도는 빠르지만 설계가 복잡하고 구조 변경이 어려운 제어 방식 : Hardwired (고정 배선 제어)
명령어 실행 주기(메이저 상태) 4단계 : Fetch -> Indirect -> Execute -> Interrupt
오퍼랜드 필드에 '실제 데이터'가 들어있어 메모리 참조가 0회인 가장 빠른 방식 : 즉시 주소
오퍼랜드 필드에 데이터의 '실제 주소'가 들어있어 메모리 참조가 1회인 방식 : 직접 주소
오퍼랜드 필드가 가리키는 곳에 가면 '또 다른 주소'가 있는 방식으로, 메모리 참조가 2회 이상인 것 : 간접 주소
'프로그램 카운터(PC)'의 값에 변위(Displacement)를 더해 유효 주소를 구하는 방식 : 상대 주소
'인덱스 레지스터'의 값에 변위를 더하며, 배열이나 반복 루프 처리에 유리한 방식 : 인덱스 주소
분기(Branch) 명령에 의해 다음에 실행할 명령어의 주소가 바뀌어 발생하는 지연 : Control Hazard
파이프라인 수행 중 이전 단계 결과가 아직 준비되지 않아 발생하는 지연 현상 : Data Hazard
C언어의 기억 클래스 중 변수의 유효 범위를 한정하는 namespace의 구성 요소 3가지 : 변수, 클래스, 함수
3과목 - 프로그래밍
SOLID 원칙 중 '기존 코드는 수정하지 않고 기능을 확장할 수 있어야 한다'는 원칙 : 개방-폐쇄 원칙 (OCP)