C10 가상 메모리 관리01 가상 메모리 시스템02 페이지 교체 알고리즘03 프레임 할당C11 파일 시스템01 파일과 파일 시스템 이해하기02 디렉터리03 파일 관리C12 저장장치와 입출력 시스템01 저장장치와 디스크 스케쥴링02 RAID03 입출력 시스템C13 가상화와 보안01 분산 시스템02 가상화03 보안과 암호화
C10 가상 메모리 관리
01 가상 메모리 시스템
- 가상 메모리 시스템: 물리 메모리의 크기와 상관없이 큰 크기의 논리 주소 공간을 제공하는 메모리 관리 시스템
- 가상 메모리 시스템에서는 물리 메모리와 더불어 보조 저장장치의 스왑 영역까지 물리 메모리처럼 사용한다
- 스왑 영역: 하드디스크나 SSD같은 보조 저장장치에 위치
- 물리 메모리가 가득차면 일부 페이지를 스왑 영역으로 보내고(스왑 아웃), 필요한 경우 스왑 영역의 페이지를 메모리로 가져온다(스왑 인)
- 가상 메모리 시스템에서 메모리의 크기는 물리 메모리의 크기 + 스왑 영역의 크기로 정의한다
- 가상 메모리 → 실제 메모리 주소 변환 작업을 동적 주소 변환(DAT, Dynamic Address Translation)라 부른다
- 프로세스가 요구할 때만 페이지를 메모리로 가져오는 방법을 요구 페이징(demand paging)이라 한다
- 이는 기본적으로 현대 OS에서 사용된다 → 물리 메모리 절약, 메모리 효율적 관리를 위해
- vs 요구 페이징과 반대로 캐시는 pre-fetch 방식을 사용한다
- 페이지 부채와 교체 과정
- PTE: 페이지 순서대로 나열됨, 내부에는 프레임 번호가 저장되어 있음
- 또한 프레임 번호 앞에는 플래그 비트 6개?가 존재함
- 접근 비트(access bit): 페이지가 메모리에 올라온 후 사용된적이 있는지
- 변경 비트(modified bit): 페이지가 메모리에 올라온 후 변경된적이 있는지
- 유효 비트(modified bit): 페이지가 실제 메모리에 안있는지(스왑 영역에 있는지)
- 읽기 비트(read bit), 쓰기 비트(write bit), 실행 비트(execute bit): 페이지에 대한 rwx 권한을 나타내는 비트
- 유효 비트
- 유효 비트가 0일 때 → 물리 메모리의 프레임 번호
- 유효 비트가 1일 때 → 스왑 영역의 주소
- page fault: 프로세스가 페이지를 요청했는데 메모리에 없을 때
- → swap in을 실행, 유효 비트를 1 → 0으로 변경, PTE 주소도 변경
- 페이지 교체: 메모리가 가득 찼을 때 page fault가 발생한 경우 실행 됨
- → swap out으로 페이지 하나를 스왑 영역으로 내보냄, PTE를 갱신함
- → swap in으로 가져옴, PTE를 갱신함
02 페이지 교체 알고리즘
- 무작위 페이지 교체 알고리즘
- FIFO 페이지 교체 알고리즘: 메모리에서 가장 오래된 페이지를 교체하는 방법
- 최적(optimal) 페이지 교체: 미래의 접근 패턴을 살펴서 선택하는 방식
- 최적 근접(optimal approximation): 과거 사용 패턴을 바탕으로 미래의 접근 패턴을 예측하는 지역성 이론을 따름
- LRU(최근 최소 사용): 접근한지 가장 오래된 페이지를 교체
- 접근 시각을 저장해야함
- LFU(최소 빈도 사용): 참조 비트를 사용하고, 참조 비트를 일정 주기로 오른쪽으로 shift 한다
- 추가 메모리가 필요함
- NUR(최근 미사용): 최근에 참조되지 않은 페이지를 교체
- 2개 비트(접근 비트, 변경 비트)만을 사용해 대상 페이지 결정
- 각 비트는 읽기/실행, 쓰기/추가 연산이 일어날 경우 1로 바뀜
- 접근 비트를 우선으로 고려해서 대상 페이지를 선정
- 모두 (1, 1)이 되면 (0, 0)으로 초기화
- FIFO 변형 알고리즘
- 나중에 추가
03 프레임 할당
- 스레싱: 보조 저장장치에 시간을 소비해서 작업이 멈춘 것 같은 상태
- 스레싱이 일어나면 CPU 사용량은 줄어든다
- 정적 프레임 할당: 사용하는 프로그램에 적절히 프레임을 나누는 정책이 필요하다
- 균등 할당: 프로세스 별로 균등하게 할당
- 비례 할당: 프로세스의 크기에 비례하여 프레임을 할당
- 프로세스가 필요로 하는 프레임을 유동적으로 반영하기 어렵다
- 사용하지 않는 메모리를 처음부터 할당해 낭비가 생김
- 동적 프레임 할당
- 작업 집합 모델
- 나중에 추가
- 페이지 부재 빈도
- 나중에 추가
- 전역 교체와 지역 교체
- 페이지 교체가 일어날 때 모든 프로세스의 프레임을 대상으로 하는지, 현재 실행중인 프로세스의 프레임만을 대상으로 할지
- 지역 교체: 다른 프로세스에 영향을 미치지 않음, 다른 프로세스에서 스레싱이 발생하지 않음
- 자주 사용하는 페이지가 스왑 영역으로 옮겨져 시스템이 효율이 떨어질 수 있음
- → 전체 시스템을 고려하면 전역 교체 방식이 지역 교체 보다 효율적이다
C11 파일 시스템
01 파일과 파일 시스템 이해하기
- 파일은 HDD,SDD, USB 메모리, CD, DVD등과 같은 저장장치에 보관한다
- 사용자는 OS의 파일 시스템을 이용해 생성, 수정, 읽기, 쓰기, 삭제의 작업을 수행할 수 있다
- OS별로 다른 파일 시스템을 사용한다
- 윈도우 XP 이전: FAT, 윈도우: NTFS, 유닉스: UFS/EXT
- 파일 시스템은 파일 테이블을 이용해 파일 이름, 저장 위치, 접근 권한 등을 관리한다
- 파일과 블록
- 저장장치에서는 메모리보다 더 큰 데이터를 효율적으로 관리하기 위해 파일을 일정 크기로 묶어 관리하는데, 이를 블록이라 부른다
- 즉 메모리의 주소단위가 바이트이듯, 파일 시스템에서는 블록을 쓴다
- 파일의 속성
- 파일은 실행 파일과 데이터 파일로 나뉜다
- 파일 헤더
- 파일 크기, 파일 제작 날짜, 접근 권한등이 os레벨에서 관리된다
- 리눅스 - 아이노드, 윈도우 - mft?
- 파일의 버전 번호, 크기, 특수 정보등은 파일 헤더에 위치한다
정처기 책처럼 정리하지말고, 대졸자가 읽어도 아하! 느낌이 들게 정리해야함
- 파티션과 포매팅
- 하나의 저장장치를 여러개로 나눌때 각각의 구획을 파티션이라고 한다
- 유닉스에는 여러개의 저장장치를 하나의 파티션으로 통합하는 기능이 존재한다
- 파티션 정보의 위치
- 컴퓨터 전원을 켜면: BIOS 하드웨어 검사 → MBR에 있는 부트로더를 실행해 OS를 메모리로 올리기
- MBR 방식은 오래 됐고, 최대 4개의 주 파티션만 생성이 가능, 2TB 이상의 디스크를 인식할 수 없음
- 그래서 나온게 GPT 펌웨어 → 128개 이상의 파티션, 8ZB 사용 가능
- CRC 코드를 이용해 파티션 테이블을 안전하게 보호하고, 중요 데이터를 끝부분에 백업해 장애 복구가 가능하다
BIOS 다음 UEFI에서 부트로더를 불러옴, 이게 GRUB이나 윈도우 부트매니저
파티션마다 guid가 생겨서 중복 체크를 한다
GPT 데이터를 crc를 함 → 이걸 secure boot라고 한다
- 디스크 포맷
- 저장장치의 파일 시스템을 초기화 하는 작업
- 빠른 포맷 → 파일 테이블만 초기화
zfs는 작동중에 배드섹터를 찾는다
- 디스크 단편화
- 블록크기는 일반적으로 4KB
- 내부 단편화가 당연하게도 발생
- 외부 단편화도 발생함 → HDD에서 디스크 헤더가 여러 위치를 이동해야 함 → 조각 모음
- 파일 구조
- 순차 파일 구조(일반적): 파일 내용이 하나의 긴 줄로 늘어선 모양
- 공간 낭비가 없음
- 순차 접근함 → 데이터 삽입/삭제, 검색에 한계가 있음
- 인덱스 파일 구조
- 현대의 파일 시스템 구조
- 순차 구조에 인덱스 테이블을 추가해서 순차 접근과 직접 접근이 모두 가능
- CD, ROM, HDD 보급과 함께 개발된 방식, ISAM 파일이라 부름
- 직접 파일 구조
- 인덱스 테이블을 탐색하는 오버헤드를 줄이는 방식 → 해시 테이블을 이용함
- 해시 함수를 잘 찾아야 한다, 데이터 접근이 빠르다
- 유닉스에서의 파일 접근 권한
- 표시
- - → 일반 파일
- d → 디렉토리
- l → 링크
- 권한 비트 rwx
- 소유자 - 그룹 - 기타 사용자
02 디렉터리
03 파일 관리
- 파일 시스템의 구조
- 부트 영역: OS 부팅에 사용되는 영역
- 파일 테이블 영역
- 블록 영역
- 블록 할당 방식
- 연속 할당: 파일의 모든 블록을 연속된 블록에 배치
- 불연속 할당: 비어 있는 블록에 데이터를 분산 저장, 파일 시스템이 이것을 관리
- 현대에 대부분 사용
- 연결 할당: 연결 리스트로 블록을 관리, 각 블록이 다음 블록에 포함
- FAT32, 임의 접근이 비효율적
- 인덱스 할당: 별도의 인덱스 블록에 저장, 파일 테이블에는 인덱스 블록의 위치 정보만 기록
- UFS
- 빈 공간 관리
- 빈 공간 리스트를 사용
- 윈도우와 유닉스 파일 시스템
- FAT32
- NTFS
- UFS
C12 저장장치와 입출력 시스템
01 저장장치와 디스크 스케쥴링
- HDD의 이동 헤드 방식
- 플래터
- 스핀들
- 반도체 기반 저장장치: SSD
SLC, MLC, TLC, QLC
셀이 덜 들어갔다 → 싸다
같은 용량이면 SLC가 셀이 많이 들어가 있다 → 피로도가 훨씬 적음
sequential read 속도는 QLC가 약간 더 빠를 수 있다. 그러나 random access는 느릴 것
- 인터페이스: SATA(serial ATA) vs NVMe
- 옛날에는 HDD와 같이 SATA를 사용했으나, 요즘은 NVMe를 사용
- 단편화(Fragmentation)
- HDD는 외부 단편화로 인한 속도 저하 발생
- 광 디스크 저장장치: CD, DVD, Blu-ray
- 디스크 스케쥴링 알고리즘
- FCFS(First come, First service)
- SSTF(Shortest Seek Time First)
- 블록 SSTF
- SCAN: 한 방향으로만 헤드가 이동
- 제일 많이 씀 → 오버헤드가 적음
- C-SCAN: SCAN에서 돌아갈때 그냥 무시하고 돌아감
- LOOK: SCAN하다 더이상 앞에 없으면 반대 방향으로 이동
- C-LOOK
SSD는 CFQ BFQ
02 RAID
- 디스크 장애에 대한 복구 기능과 성능 향상을 위해 RAID를 사용한다
- 여러개의 디스크를 논리적으로 묶어서 사용한다
- 미러링
- 원본 디스크와 같은 크기의 백업 디스크에 같은 데이터를 동시에 저장
- 저장 효율이 50%
- 스트라이핑
- 데이터를 여러개의 디스크에 분산하여 저장해 입출력 성능을 높임
- 읽기/쓰기 속도 향상
- 디스크 하나가 고장나면 전체를 복구할 수 없음
- RAID 0: 스트라이핑
- 순차 읽기/쓰기 성능 대폭 향상
- RAID 1: 미러링
- 디스크 장애시 복구 가능, 읽기 요청 분산 가능
- 쓰기 성능 다소 저하
- RAID 2: ECC 기반 오류 정정
- ~
- RAID 5: 분산 패리티 기반 고신뢰성 방식
- 스트라이핑을 하면서 parity를 모든 디스크에 분산 적용해 쓰기 병목을 제거함
- RAID 6: 이중 분산 패리티 기반 고신뢰성 방식
- 복합 RAID
- RAID 01 vs RAID 10
- 10이 좋다 → 이유 알기
- RAID 50 vs RAID 60
03 입출력 시스템
- 저속 장치
- 키보드 등
- 고속 장치
- 그래픽 카드, NVMe SSD, 네트워크 카드등
- 버스
- CPU, 메모리, 주변 장치를 연결
- 채널
- 버스를 분할하여 별도의 통로로 사용
- 입출력 버스 구조
- 초기 구조
- 입출력 제어기
- 그래픽 카드
- 실수 연산(FP)를 빠르게 처리하도록 설계됨
- 포트
- 메인 버스
- 그래픽 전용 버스(PCIe)
- 직렬 통신
- 병렬 통신
- SATA
- USB
- 입출력 제어 방식
- DMA(직접 메모리 접근)
- MMIO(메모리 맵 입출력)
- 인터럽트
C13 가상화와 보안
01 분산 시스템
- 강결합 시스템
- 약결합 시스템
- 클라이언트 - 서버 구조
- P2P 시스템
- 클라우드 컴퓨팅
- 네트워크 저장장치
- DAS
- NAS
- SAN
- 고 가용성 시스템
- 이중화 구성
- 클러스터링, 로드 밸런싱
- 고가용성 시스템 유형
02 가상화
- 자바와 가상머신
- 가상화 관련 기술
- 하이퍼바이저
- cgroupd namespaced
03 보안과 암호화
- 운영체제 보안
- 암호화