Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 코드잇
- 르탄즈5기
- 코드잇TIL
- 알고리즘
- 앱개발강의
- DB마이저널
- bottom tab navigation
- 스파르타코딩클럽
- 앱개발부트캠프
- 코딩공부
- 코드잇앰배서더
- 혼공단JS
- 오블완
- 내일배움캠프
- 독서활동
- 내일배움캠프사전캠프
- 티스토리챌린지
- 코드잇강의추천
- ReactNative
- DB드림리더장학생
- js
- DB김준기문화재단
- 자바스크립트
- GIT
- 환경교육봉사
- 혼공단
- 오늘도코드잇
- 혼공컴운
- c++헤더
- 르탄즈
Archives
- Today
- Total
axnuo
[혼공단 / OS ] 가상 메모리와 파일 시스템 본문
Chapter 14. 가상 메모리
14-1. 연속 메모리 할당
스와핑
현재 실행되지 않는 프로세스를 쫓아내고 빈 공간에 또 다른 프로세스를 적재해 실행하는 방식
- 스왑 영역 : 프로세스들이 쫓겨나는 보조기억장치의 일부 영역
- 스왑 아웃 : 현재 실행되지 않는 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
- 스왑 인 : 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
메모리 할당
- 최초 적합⇒ 적재될 수 있는 공간을 발견하는 즉시 메모리를 할당하는 방식으로 검색 최소화 가능
- 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식
- 최적 적합
- 운영체제가 빈 공간을 모두 검색한 후 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식
- 최악 적합
- 운영체제가 빈 공간을 모두 검색한 후 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식
외부 단편화
빈 공간보다 큰 프로세스를 적재하기 어려워 메모리가 낭비되는 현상
- 해결방안
- 압축 : 흩어져 있는 빈 공간을 하나로 모으는 방식
14-2. 페이징을 통한 가상 메모리 관리
- 가상 메모리 : 실행하고자 하는 프로그램 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술
- 페이징, 세그멘테이션
페이징
- 프로세스의 논리 주소 공간을 페이지라는 단위로 자르고
- 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 단위로 자르고
- 페이지를 프레임에 할당하는 것이 페이징
- 프로세스 단위가 아닌 프레임 단위로 페이지 아웃, 페이지 인
페이지 테이블
- 프로세스가 메모리에 불연속적으로 적재되어 있으면 CPU는 순차적 실행 불가 : 다음에 실행할 명령어 위치 찾기 힘듦
- 실제 메모리 물리 주소에서는 불연속적이더라도 CPU가 바라보는 논리 주소에는 연속적으로 배치되도록 하는 것이 페이지 테이블
- 페이지 번호와 프레임 번호를 이어줌
- 프로세스마다 프로세스 페이지 테이블이 있음
- CPU에서 0, 1, 2를 페이지 테이블을 통해 물리 주소의 프레임 위치로 찾아 감
- 내부 단편화 발생 가능
- 프로세스를 페이지라는 단위로 자르는데, 남는 부분이 있음.
- 프레임보다 작은 크기의 페이지를 넣게 되면, 메모리에 남는 부분이 생긴다. -> 내부 단편화
- 일부 운영체제 (리눅스) 에서는 기본 페이지 크기보다 더 큰 페이지를 허용하여 메모리에 유지하는 경우도 있음 (대형 페이지 huge page) 라고 함
- 페이지 테이블 베이스 레지스터 (PTBR : Page Table Base Register) : CPU 내에서 각 프로세스의 페이지 테이블이 적재된 주소를 가리킴
- 메모리 접근 시간이 두 배로 늘어남
- 메모리에 있는 페이지 테이블을 보기 위해
- 페이지 테이블을 통해 알게 된 프레임에 접근하기 위해
- CPU 곁에 (MMU 내에) TLB Translation Lookaside Buffer라는 페이지 테이블 캐시 메모리를 둠
- 참조 지역성에 근거해 최근 사용된 페이지 위주로 저장
- TLB 히트 : 논리 주소에 대한 페이지 번호가 TLB에 있는 경우
- TLB 미스 : 논리 주소에 대한 페이지 번호가 TLB에 없는 경우 (메모리의 페이지 테이블에 접근해야 함)
페이징 주소 변환
- 특정 주소에 접근하기 위해 필요한 정보
- 어떤 페이지, 프레임에 접근하고 싶은지
- 접근하려는 주소가 그 페이지, 프레임으로부터 얼마나 떨어져 있는지
- 논리주소는 페이지 번호와 변위로 이뤄져있음
- 논리주소 <페이지 번호, 변위> -> 페이지 테이블 -> 물리주소 <프레임 번호, 변위> (변위 값은 동일)
페이지 테이블 엔트리
- 페이지 테이블 엔트리 PTE Page Table Entry : 페이지 테이블의 각 행
- 페이지 번호, 프레임 번호, 유효 비트, 보호 비트, 참조 비트, 수정 비트
유효 비트 valid bit
- 현재 해당 페이지 접근 가능 여부
- 페이지가 보조기억장치(스왑 영역)에 있는 경우는 메모리에 적재되어 있기 않기 때문에 접근 불가
- 메모리에 없는 페이지(유표비트가 0)로 접근하고자하면 페이지 폴트 예외 발생 - 하드웨어 인터럽트 처리 방식처럼 처리
- CPU는 기존 작업 백업
- 페이지 폴트 처리 루틴 실행
- 페이지를 메모리로 가져오고 유효 비트를 1로 변경
- CPU는 해당 페이지에 접근 가능
보호 비트 protection bit
- 페이지 보호 기능. 읽고 쓰기가 가능한 페이지인지, 읽기만 가능한 페이지인지 표기
- 접근권한을 제한하여 페이지 보호
- 읽기, 쓰기, 읽기/실행, 읽기/쓰기/실행
참조 비트 reference bit
- CPU가 이 페이지에 접근한 적 있는지
수정 비트 modified bit 더티 비트 dirty bit
- 데이터를 쓴 적이 있는지 없는지 수정 여부
- 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야하는지, 할 필요가 없는지 판단
14-3. 페이지 교체와 프레임 할당
요구 페이징
- 필요한 페이지만을 메모리에 적재하는 기법
- 순수 요구 페이징 기법 : 메모리에 페이지 적재하지 않은 채로 시작. 초기에는 페이지 폴트 발생. 이후에는 페이지 폴트 빈도 줄음
- 페이징 시스템이 안정적으로 작동하려면 페이지교체, 프레임할당이 원활히 이루어져야 함
페이지 교체 알고리즘
- 메모리에서 쫓아낼 페이지를 결정하는 방법
- 페이지 폴트 횟수를 알아야하며, 이는 페이지 참조열로 알 수 있음
- 페이지 참조열 : CPU가 참조하는 페이지들 중 연속된 페이지를 생략한 페이지열
FIFO 페이지 교체 알고리즘
- 메모리에 가장 먼저 올라온 페이지부터 내쫓음
- 구현 간단. 효율 낮음
- 2차 기회 페이지 교체 알고리즘 : FIFO 페이지 알고리즘 + 페이지의 참조 비트 참고
최적 페이지 교체 알고리즘
- 앞으로 사용할 빈도가 가장 낮은 페이지를 내쫓음
- 페이지 폴트율 제일 낮음
- 구현 어려움
LRU 페이지 교체 알고리즘
- 오랫동안 사용하지 않은 페이지를 내쫓음
스래싱과 프레임 할당
- 스래싱 thrashing : 프로세스가 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저하되는 문제
- 값이 높으면 CPU 효율 높음
- 값이 낮으면 CPU 효율 낮음
- 멀티프로그래밍 정도 : 현재 메모리에 동시에 실행 중인 프로세스의 양
- 멀티프로그래밍 정도를 지나치게 높이면 각 프로세스가 사용가능한 프레임수가 적어지고, 페이지 폴트는 빈번하게 발생. CPU 효율 저하
- CPU 성능 좋아도 메모리에서 동시 실행 프로세스 수용 못하면 컴퓨터 성능 저하
프레임 할당 방식
- 정적 할당 방식 : 프로세스 실행 과정 고려 없이 프로세스 크기, 물리 메모리 크기만 고려
- 균등 할당 : 모든 프로세스에 균등하게 프레임 할당
- 프로세스 크기가 각기 다르므로 비추천
- 비례 할당 : 프로세스 크기 크면 많은 프레임을, 작으면 적은 프레임을 할당
- 균등 할당 : 모든 프로세스에 균등하게 프레임 할당
- 동적 할당 방식 : 프로세스 실행을 보고 할당할 프레임 수 결정
- 작업 집합 모델 사용 방식
- 작업 집합 : 실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합
- 스래싱은 빈번한 페이지 교체에 의해 발생
- 프로세스가 일정 기간 동안 참조한 페이지 집합을 기억하여 빈번한 페이지 교체 방지
- CPU가 과거에 주로 참조한 페이지를 작업 집합에 포함한다면, 운영체제는 작업 집합의 크기만큼만 프레임 할당
- 페이지 폴트 빈도 (PFF) 사용 방식
- 페이지 폴트율이 높으면 그 프로세스는 너무 적은 프레임을 갖고 있음
- 페이지 폴트율이 낮으면 그 프로세스는 너무 많은 프레임을 갖고 있음
- 페이지 폴트율에 상한선과 하한선을 정하고, 그 내부 범위 안에서만 프레임 할당
- 작업 집합 모델 사용 방식
Chapter 15. 파일시스템
- 파일: 하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합
- 이름과 파일을 실행하기 위한 정보, 파일 관련 부가 정보(속성, 혹은 메타데이터)
- 파일 속성과 유형
- 디렉터리(윈도우 운영체제에서는 폴더라고 부름)
- 경로: 디렉터리를 이용해 파일 위치, 파일 이름을 특징짓는 정보
- 절대 경로: 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로
- 상대 경로: 현재 디렉터리붜 시작하는 경로
- 경로: 디렉터리를 이용해 파일 위치, 파일 이름을 특징짓는 정보
- 파티셔닝: 저장 장치의 논리적인 영역을 구획하는 작업
- 포매팅: 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업
- 파일 할당
- 연속 할당: 보조기억장치 내 연속적인 블록에 파일을 할당
- 외부 단편화 야기
- 연결 할당: 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당
- 반드시 첫 번째 블록부터 하나씩 차례대로 읽어야 함
- 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록 접근 불가
- 색인 할당: 파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아 관리
- 연속 할당: 보조기억장치 내 연속적인 블록에 파일을 할당
- 파일 시스템
- FAT 파일 시스템(File Allocation Table)
- 디렉터리 엔트리에 파일 이름과 파일의 첫 번째 블록 주소가 명시됨
- 유닉스 파일 시스템
- 파일마다 i-node가 있고 파티션 내 특정 영역에 모여 있음
- FAT 파일 시스템(File Allocation Table)
- 저널링 파일 시스템: 작업 로그를 통해 시스템 크래시가 발생했을 때 빠르게 복구하기 위한 방법
- 마운트: 한 저장 장치의 파일 시스템에서 다른 저장 장치의 파일 시스템에 접근할 수 있도록 파일 시스템을 편입시키는 작업
필수미션
p. 400의 확인 문제 1번 풀고 인증하기
- 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식 : 최초 적합
- 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식 : 최악 적합
- 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식 : 최적 적합
'CS > OS' 카테고리의 다른 글
TIL - xv6 master 하기 (0) | 2024.11.18 |
---|---|
[ OS ] xv6 expected specifier-qualifier-list before 'static' 에러 (0) | 2024.11.16 |
[혼공단/OS] 프로세스 동기화와 교착상태 (0) | 2024.02.04 |
[OS/혼공단] 프로세스와 스레드 / CPU 스케줄링 (0) | 2024.01.28 |