14. 가상 메모리
14-1. 연속 메모리 할당
스와핑
- 스와핑
- 메모리에 적재된 프로세스들 중 현재 실행되지 않는 프로세스를 임시로 보조 기억 장치 일부 영역으로 쫒아내고, 그렇게 해서 생긴 메모리 상의 빈 공간에 또 다른 프로세스를 적재하여 실행하는 방식
- 스왑 영역
- 프로세스들이 쫒겨나는 보조기억장치의 일부 영역
- 스왑아웃
- 현재 실행되지 않는 프로세스가 메모리에서 스왑영역으로 옮겨지는 것
- 스왑 인
- 스왑 영역에 있던 프로세스가 다시 메모리로 옮겨오는 것
- 스왑 아웃된 프로세스가 다시 스왑 인 될때는 스왑 아웃 되기 전의 물리 주소와는 다른 주소에 적재될 수 있다.
메모리 할당
비어있는 메모리 공간에 프로세스를 연속적으로 할당하는 방식
- 최초 적합
- 운영 체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식
- 프로세스가 적재될 수 있는 공간을 발겮나느 즉시 메모리를 할당하는 방식
- 검색을 최소화 할 수 있고 결과적으로 빠른 할당이 가능하다.
- 최적 적합
- 운영 체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식
- 최악 적합
- 운영 체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식
외부 단편화
- 프로세스를 할당하기 어려울 만큼 자긍ㄴ 메모리 공간들로 인해 메모리가 낭비되는 현상을 의미
- 해결 방안
- 압축(메모리 조각 모음)
- 여기저기 흩어져 있는 빈 공간들을 하나로 모으는 ㅎ방식
- 메모리 내에 저장된 프로세스를 적당히 재배치시켜 여기저기 흩어져 있는 작은 빈 공간들을 하나의 큰 빈공간으로 만드는 것
- 단점
- 작은 빈 공간들을 하나로 모으는 동안 시스템은 하던 일을 중지해야 한다.
- 메모리에 있는 내용을 옮기는 작업은 많은 오버헤드를 야기한다.
- 어떤 프로세스를 어떻게 움직여야 오버헤드를 최소화하며 압축할 수 있는지에 대한 명확한 방법을 경정하기 어렵다.
- 페이징 기법
14-2. 페이징을 통한 가상 메모리 관리
페이징이란
- 가상 메모리
- 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행할 수 있게 하는 기술
- 외부 단편화 문제 해결 가능
- 가상 메모리 관리 기법
- 페이징
- 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 자르고, 메모리 물리 주소 공간을 프레임이라는 페이지와 동일한 크기의 일정한 단위로 자른 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법
- 페이지 아웃
- 페이지 인
- 한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없다, 프로세스를 이루는 페이지 중 실행에 필요한 일부 페이지만을 메모리에 적재하고, 당장 실행에 필요하지 않는 페이지들은 보조 기억 장체에 남겨둘 수 있다.
- 세그멘테이션
페이지 테이블
- 페이지 테이블
- 프로세스가 메모리에 불연속적으로 배치되면 CPU입장에서 ‘다음에 실행할 명령어 위치’를 찾기 어렵다.
- 이를 해결하기 위해 페이징 시스템은 프로세스가 비록 물리 주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록 하는 것이 페이지 테이블이다.
- CPU로 하여금 페이지 번호만 보고 해당 페이지가 적재된 프레임을 찾을 수 있게 한다.
- 물리 주소 상에는 프로세스들이 분산되어 저장되어있더라도 CPU입장에서 바라본 논리 주소는 연속적으로 보일 수 있다.
- 단점
- 메모리 접근 시간이 2배로 늘어난다.
- 해결 방법
- TLB : 페이지 테이블의 캐시 메모리
- TLB히트 : CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우
- TLB미스 : 페이지 번호가 TLV에 없을 경우
페이징에서의 주소 변환
- 특정 주소에 접근하기 위해 필요한 정보
- 어떤 페이지 혹은 프레임에 접근하고 싶은지
- 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지
- 페이징 시스템에서는 모든 논리 주소가 기본적으로 페이지 번호와 변위로 이루어져 있다.
페이지 테이블 엔트리
- 페이지 테이블 엔트리
- 페이지 테이블의 각각의 행들
- 페이지 테이블 엔트리에 포함되는 정보
- 유효 비트
- 현재 해당 페이지에 접근 가능한지 여부를 알려준다.
- 페이지 테이블 엔트리에서 프레임 번호 다음으로 중요한 정보
- CPU가 유효비트가 0인 메모리에 적재되엉 있지 않는 페이지로 접근하려고 하면 페이지 폴트라는 예외가 발생한다.
- CPU가 페이지 폴트를 처리하는 과정을 하드웨어 인터럽트를 처리하는 과정과 유사하다.
- CPU는 기존의 작업 내역을 백업한다.
- 페이지 폴트 처리 루틴을 실행한다.
- 페이지 처리 루틴은 원하는 페이지를메모리로 가져온 뒤 유효 비트를 1로 변경해준다.
- 페이지 폴트를 처리했다면 이제 CPU는 해당 페이지에 접근할 수 있게된다.
- 보호 비트
- 페이지 보호 기능을 위해 존재한느 비트
- 이를 통해 해당 페이지가 읽고 쓰기가 모두 가능한 페이지인지, 혹은 읽기만 가능한 페이지인지를 나타낼 수 있다.
- 0일 경우 : 읽기만 가능한 페이지
- 1일 경우 : 읽고 쓰기가 모두 가능한 페이지
- 참조 비트
- CPU가 이 페이지에 접근한 적이 있는지 여부를 나타낸다.
- 수정 비트(더티비트)
- 해당 페이지에 데이터를 쓴 적이 있는지 없는지 수정 여부를 알려준다.
14-3. 페이지 교체와 프레당
요구 페이지
- 요구 페이지
- 프로세스에 메모리를 적재할 때 처음부터 모든 페이지를 적재하지 않고 필요한 페이지만을 메모리에 적재하는 기법
- 기본적인 양상
- CPU가 특정 페이지에 접근하는 명령어를 실행한다.
- 해당 페이지가 현재 메모리에 있을 경우 CPU는 페이지가 적재된 프레임에 접근한다.
- 해당 페이지가 현재 메모리에 없을 경우 페이지 폴트가 발생한다.
- 페이지 폴트 처리 루틴은 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정한다.
- 다시 1번을 수행한다.
- 요구 페이징 시스템이 안정적으로 작동하기 위해 해결되어야 하는 것
- 페이지 교체
- 페이지 교체 알고리즘 : 쫒아낼 페이지를 경정하는 방법
- 프레임 할당
- 순수 요구 페이징 기법
- 아무런 페이지도 메모리에 적재하지 않은 채 무작정 실행부터 하는 것
페이지 교체 알고리즘
- 좋은 페이지 교체 알고리즘 : 페이지 폴트를 가장 적게 일으키는 알고리즘
- 페이지 참조열을 통해 페이지 폴트 횟수를 알 수 있다.
- CPU가 참조한 페이지들 중 연속된 페이지를 생략한 페이지열
- 연속된 페이지를 생략하는 이유는 중복된 페이지를 참조하는 행위는 페이지 폴트를 발생시키지 않기 때문이다.
- 대표적인 페이지 교체 알고리즘
- FIFO 페이지 교체 알고리즘
- 가장 단순한 방법
- 메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식
- 단점
- 프로그램 실행 초기에 적재된 페이지 속에는 프로그램 실행 초기에 잠깐 실행되다가 이후에 사용되지 않을 페이지도 있겠지만, 프로그램 실행 내내 사용될 내용을 포함하고 있을 수도 있다.
- 최적 페이지 교체 알고리즘
- CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘
- 사용빈도가 가장 낮은 페이지를 교체하는 알고리즘
- 실제 구현이 어렵다.
- LRU 페이지 교체 알고리즘
- 가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘
스래싱과 프레임 할당
- 페이지 폴트가 자주 발생하는 이유에 나쁜 페이지 교체 알고리즘만 있는 것은 아니다. 프로세스가 사용할 수 있는 프레임 수가 적어도 페이지 폴트는 자주 발생한다.
- 스래싱
- 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제
- 멀티 프로그래밍의 정도 : 메모리에서 동시에 실행되는 프로세스의 수
- 발생 근본 원인 : 각 프로세스가 필요로 하는 최소한의 프레임 수가 보장되지 않았기 때문
- 프레임 할당 방식
- 균등 할당 : 모든 프로세스에 균등하게 프레임을 제공하는 방식
- 비례 할당 : 프로세스의 크기가 크면 프레임을 많이 할당하고 프로세스 크기가 작으면 프레임을 적게 나눠 주는 방식
- 프로세스를 실행하는 과정에서 배분할 프레임을 결정하는 방식
- 작업 집합 모델
- 작업 집합 : 실행 중인 프로세스가 일정 시간 동안 참조한 페이지의 집합
- 페이지 폴트 빈도
15. 파일 시스템
15-1. 파일과 디렉터리
파일
- 파일
- 하드디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합
- 의미있고 관련있는 정보를 모은 논리적 단위
- 파일을 이루는 정보
- 파일이름
- 파일을 실행하기 위한 정보
- 속성(메타데이터) : 파일 관련 부가 정보
- 파일 속성과 유형
속성 이름 | 의미 |
---|
유형 | 운영체제가 인지하는 파일의 종류(확장자) |
크기 | 현재 크기와 허용 간으한 최대 크기 |
보호 | 사용자가 해당 파일을 읽고, 쓰고, 실행할 수 있는지 |
생성 날짜 | 파일이 생성된 날짜 |
마지막 접근 날짜 | 파일에 마지막으로 접근한 날짜 |
마지막 수정 날짜 | 파일이 마지막으로 수정된 날짜 |
생성자 | 파일을 생성한 사용자 |
소유자 | 파일을 소유한 사용자 |
위치 | 파일의 보조 기억 장치상의 현재 위치 |
- 파일 유형에 따른 대표 확장자
파일 유형 | 대표적인 확장자 |
---|
실행 파일 | 없는 경우, exe, com, bin |
목적 파일 | obj, o |
소스 코드 파일 | c, cpp, cc, java, asm, py |
워드 프로세서 파일 | xml, rtf, doc, docx |
라이브러리 파일 | lib, a, so, dll |
멀티 미디어 파일 | mped, mov, mp3, mp4, avi |
백업/보관 파일 | rar, zip, tar |
- 파일 연산을 위한 시스템 호출
- 파일을 다루는 모든 작업은 운영체제에 의해 이뤄집니다. 어떤 응용 프로그램도 임의로 파일을 조작할 수 없으며 파일을 다루려면 운영체제에 부탁해야 합니다.
- 파일 연산을 위한 시스템 호출
- 파일 생성
- 파일 삭제
- 파일 열기
- 파일 닫기
- 파일 읽기
- 파일 쓰기
디렉터리
- 디렉터리
- 파일을 일목요연하게 관리하기 위해 이용한다.
- 윈도우 운영체제에서는 폴더라고 부른다.
- 1단계 디렉터리
- 하나의 디렉터리만 존재
- 옛날 운영체제 방식
- 모든 파일이 하나의 디렉터리 아래에 있는것
- 트리구조 디렉터리
- 여러 계층을 가진 디렉터리
- 최상위 디렉터리가 있고 그 아래에 여러 서브 디렉터리가 있을 수 있다.
- 루트 디렉터리 : 최상위 디렉터리
- 경로 : 디렉터리를 이용해 파일 위치, 파일 이름을 특정짓는 정보
- 절대경로와 상대 경로
- 절대경로 : 루트 디렉터리에서 자기 자신까지 이르는 고유한 경로
- 상대경로 : 현재 디렉터리부터 시작하는 경로
- 디렉터리 연산을 위한 시스템 호출의 종류
- 디렉터리 생성
- 디렉터리 삭제
- 디렉터리 열기
- 디렉터리 닫기
- 디렉터리 읽기
- 디렌터리 엔트리
- 많은 운영체제에서는 디렉터리를 그저 특별한 형태의 파일로 간주하며, 디렉터리도 포함된 정보가 조금 특별한 파일이다.
- 디렉터리는 내부에 해당 디렉터리에 담겨있는 대상과 관련된 정보를 담고 있으며 이 정보는 보통 테이블 형태로 구성된다.
- 디렉터리 엔트리만 보아도 해당 디렉터리에 무엇이 담겨 있는지 그리고 그것들은 보조 기억장치의 어디에 있는지를 직간접적으로 알 수 있다.
15-2. 파일 시스템
- 파일 시스템 : 디렉터리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램
파티셔닝과 포매팅
- 이제 막 공자에서 생산되어 한번도 사용된 적이 없는 새 하드 디스크 또는 SSD가 있다고 가정했을때 우리는 이 보조기억장치에 곧바로 파일을 생성하거나 저장할수 없다.
- 왜냐하면 보조기억 장치를 사용하려면 파티션을 나누는 작업(파티셔닝)과 포맷작업(포매팅)을 거쳐야 하기 때문이다.
- 파티셔닝
- 저장 장치의 논리적인 영역을 구획하는 작업
- 칸막이로 영역을 나누는 작업
- 파티셔닝 작업을 통해 나눠진 영역 하나하나를 파티션이라고 한다.
- 포매팅
- 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고관리할것인지를 결정하고 새로운 데이터를 쓸 준비를 하는 작업
- 어떤 종류의 파일 시스템을 사용할지는 바로 이때 결정된다.
- 파일 시스템에는 여러 종류가 있고, 파티션마다 다른 파일 시스템을 설정할 수 있다.
- 포매팅까지 완료하여 파일 시스템을 설정했다면 이제 파일과 디렉터리를 생성할 수 있다.
파일 할당 방법
- 운영체제는 파일과 디렉터리를 블록 단위로 읽고 쓴다.
- 하나의 파일이 보조기억장치에 저장될때는 하나 이상의 블록에 걸쳐 저장된다.
- 하드 디스크의 가장 작은 저장 단위는 섹터이지만 운영체제는 하나 이상의 섹터를 블록이라는 단위로 묶은 뒤 블록 다누이로 파일과 디렉터리를 관리한다.
- 파일시스템이 모든 섹터를관리하기에는 개수가 너무 많고 크기도 작기 때문이다.
- 파일을 보조기억장치에 할당하는 방법
- 연속 할당
- 보조기억장치 내 연속적인 블록에 파일을 할당
- 외부단편화를 야기한다는 치명적인 문제가 있다.
- 불연속 할당
- 연결 할당
- 연속 할당의 문제를 해결할 수 있는 방식
- 각 블록의 일부에 다음 블록의 주소를 저장하여 각 블록이 다름 블록을 가리키는 형태로 할당한느 방식
- 파일을 이루는 데이터를 연결 리스트로 관리
- 단점
- 반드시 첫번째 블록부터 하나씩 차례대로 읽어야 한다.(임의 접근 속도가 매우 느리다.)
- 하드웨어 고장이나 오류 발생 시 해당 블록 이후 블록은 접근 불가능
- 색인 할당
- 팡리의 모든 블록 주소를 색인 블록이라느 하나의 블록에 모아 관리하는 방힉
- 색인 블록 안에 파일을 구성하는 데이터 블록 주소가 있으므로 색인 블록만 알면 해당 파일 데이터에 접근할 수 있다.
- 색인 할당을 사용하는 파일 시스템에서는 디렉터리 엔트리 파일 이름과 더불어 색인 블록 주소를 명시한다.
파일 시스템 살펴보기
- FAT 파일 시스템
- 연결 할당의 단점을 보완한 파일 시스템
- 각 블록에 포함된 다음 블록의 주소들을 한데 모아 테이블 형태로 관리하는것
- 파일 할당 테이블(FAT) : 블록주소들을 관리하는 테이블
- 유닉스 파일 시스템
- 색인 할당 기반(색인 블록을 기반으로 파일의 데이터 블록을 찾는 형식)
- i-node : 유닉스 파일 시스템의 색인 블록
- 파일 속성 정보와 15개의 블록 주소 저장
- i-node의 크기는 유한하다.
- 블록 주소 중 열두개에는 직접 블록 주소를 저장한다.
- ‘첫째’내용으로 충분하지 않다면 열세번째 주소에 단일 간접블록주소를 저장한다.
- 단일 간접 블록 : 파일 데이터가 저장된 블록이 아닌 파일 데이터를 저장한 블록 주소가 저장된 블록
- ‘둘째’내용으로 충분하지 않다면 열네번째 주소에 이중 간접 블록 주소를 저장한다.
- 이중 간접 블록 : 데이터 블록 주소를 저장하는 블록 주소가 저장된 블록
- ‘셋째’ 내용으로 충분하지 않다면 열다섯번째 주소에 삼중 간접 주소를 저장한다.
- 삼중 간접 블록 : 이중 간접 블록 주소가 저장된 블록
MISSION
p400. 확인 문제 1번
<답> 1 - 최초 적합 / 2 - 최악 적합 / 3 - 최적 적합
혼공컴운의 혼공학습이 6주차로 마무리되었습니다.
부족한 부분은 이후 추가적으로 보충할 예정이며, 6주간 좋은 커리큘럼으로 컴퓨터 구조와 운영체제를 공부할 수 있는 좋은 기회였다고 생각합니다.
다음에 또 새로운 주제로 공부하여 공유하도록 하겠습니다.
감사합니다😊