Written by coh at home

[혼공컴운]6주차 가상메모리와 파일시스템 본문

Etc/도서

[혼공컴운]6주차 가상메모리와 파일시스템

och 2024. 8. 14. 03:19

14 가상메모리

active : mem할당된 상태

suspended : mem할당 x

Swap이란

오랫동안 사용되지 않은 프로세스나 입출력자원을 대기하는 프로세스의 메모리 할당을 빼는 것.

이때 swap된 프로세스들은 보조기억장치의 swap영역에 저장된다.

suspended ↔ swap-out

resume ↔ swap-in

free -h
(Iterm2) top

14-1 연속메모리

연속적인 메모리 공간에 프로세스들을 할당하는 것.

메모리를 할당하는 방식은 3가지가 있다.

최초적합 : 순차적으로 빈 공간을 탐색하며 적재

최적적합 : 모든 공간을 탐색 후 적재 가능 공간 중 가장 작은 공간에 적재

최악적합 : 모든 공간을 탐색 후 적재 가능 공간 중 가장 큰 공간에 적재

외부 단편화 (External Fragmentation)

연속 메모리 할당은 사실 외부 단편화라는 문제를 갖고 있다.

외부단편화 : 프로세스의 스와핑이나 종료 시 해당 메모리 공간이 불연속적으로 발생한다. 이때 가용 가능 메모리 공간은 충분하나 공간이 불연속이라 프로세스를 적재하지 못하게 될 수 있는데 이를 외부 단편화라고 한다.

즉, 메모리가 불연속적으로 존재하여 프로세스를 적재하지 못하고 낭비되는 현상

해결법

  1. 압축(compaction) : 조각모음. 프로세스들을 다시 연속메모리로 재배치 시키는 방법.
  • 문제점
    • 프로세스들 중지
    • 재배치 시키는 과정의 오버헤드
  1. 페이징기법 : 오늘날 사용하는 가상메모리 기법. 14-2에서 이어서.

14-2 페이징을 통한 가상메모리 관리

연속할당은 외부단편화와 물리메모리보다 큰 프로세스를 적재할 수 없는 문제가 있습니다. 이를 해결하기 위한 방법이 페이징을 통한 가상메모리 관리기법입니다.

페이징

프로세스를 일정 단위로 자르고 메모리에 불연속적으로 할당하는 기법. 즉, 프로세스의 논리 주소 공간을 페이지라는 단위로 자르고 메모리의 물리 주소 공간인 프레임이라는 단위로 자르고 페이지를 프레임에 할당하는 기법.

논리주소 : CPU가 보는 주소

특징

  • 페이지 단위의 스왑아웃/스왑인
  • 실행에 필요한 페이지만 메모리 적재 → 물리메모리 크기보다 큰 프로그램 실행가능

페이지 테이블

메모리에 불연속 배치한다면 다음 실행할 명령어를 어떻게 찾지? CPU가 사용하는 논리 주소 공간은 연속이어야 하는데…!! → 페이지 테이블

해당 페이지가 프레임의 어디에 저장되었는지 정보를 갖고 있는 테이블 정보.

PTBR (page table base register)

각 프로세스별로 페이지 테이블을 갖고 있고 페이지 테이블은 메모리에 적재된다. 저장된 주소는 CPU의 PTBR에 저장된다.

e.g) 프로세스 A실행

PTBR에서 A의 페이지 테이블 주소를 찾음 → 테이블의 프레임 번호 찾음 → 해당 프레임에 접근함.

메모리를 CPU에서 두 번 접근해야하는 문제가 있다. 따라서 이를 해결하기 위해 TLB(Translation Lookaside Buffer)라는 캐시메모리를 CPU에서 조회한다.

TLB (Translation Lookaside Buffer)

참조지역성에 의해 최근에 사용된 페이지 위주로 가져와서 저장.

페이징에서의 주소 변환

하나의 페이지 혹은 프레임은 여러 주소를 포함하고 있다. 페이지 내의 주소를 접근하는 방법에는 두 가지 정보가 필요하다.

  • 접근하려는 페이지 번호 또는 프레임 번호
  • 해당 페이지에서의 변위

페이징 시스템에서 모든 논리주소는 페이지 번호 + 변위로 이루어져있다. 페이지번호: 접근할 페이지 번호. 페이지 테이블에서 프레임 번호를 얻을 수 있다. 변위: 해당 프레임 시작번지에서 떨어진 주소

페이지 테이블 엔트리

페이지 테이블의 각각의 행

  • 페이지번호
  • 프레임번호
  • 유효비트 : 현재 페이지가 메모리에 적재 되었는지 알려주는 비트
    • 메모리 : 1 / 보조기억장치 : 0
    • 0인 경우, 페이지 폴트가 발생.
      1. CPU는 기존 작업 내용 벡업
      2. 페이지 폴트 처리 루틴
      3. 원하는 페이지 메모리 적재 후 유효비트 1로 수정
      4. 폴트 처리 후 해당페이지 접근
  • 보호비트 : 해당 페이지 수정가능 여부. rwx생각하면 편하다.
  • 참조 비트: 해당 페이지 접근 여부.
  • 수정 비트: 해당 페이지의 수정 여부. 해당 비트를 체크하여 보조기억장치의 데이터를 업데이트한다.

페이징 장점 :쓰기 시 복사

프로세스 간 페이지를 공유할 수 있다.

fork()

전통적인 프로세스

프로세스 간 자원을 공유하지 않는다. 따라서 부모프로세스의 메모리 내용이 다른 영역에 자식프로세스로서 복제되고 각각의 페이지 테이블이 생기게 된다. → 메모리 낭비

페이징을 통한 쓰기 시 복사

자식이 부모의 프레임을 그대로 가리키게 한다. 둘 중 하나의 프로세스가 쓰기 작업을 하게 되면 해당 페이지를 별도의 공간으로 복제하여 페이지 테이블을 업데이트 한다.

계층적 페이징

페이지 테이블은 생각보다 크다. 모든 페이지 테이블의 엔트리를 메모리에 적재하면 용량이 부족해진다.

페이지 테이블을 페이징해서 여러 단계의 페이지를 두는 방식

페이징 단점 :내부단편화

프로세스의 크기가 딱 페이지 크기만큼 나누어 떨어지지 않아서 미사용되는 메모리 공간이 발생하는 것.

→ 페이지 크기를 작게 설정 → 페이지 테이블의 크기가 커지는 문제가 있다.

14-3 페이지 교체와 프레임 할당

메모리 크기보다 큰 프로세스를 실행하기 위해서는 두가지 작업이 필요하다.

  • 실행에 필요한 페이지만 남겨놓고 나머지는 스왑 영역으로 내보낸다.
  • 프로세스에게 적절한 수의 프레임을 할당하여 페이지를 할당한다.

이를 위해 3가지에 대해 학습한다. 요구페이징, 페이지 교체 알고리즘, 프레임할당

요구페이징

프로세스를 메모리에 적재할 때 실행에 필요한 페이지만을 적재하는 기법.

해당페이지가 메모리에 없을 경우 폴트가 발생하고 페이지 폴트 루틴을 처리한다.

요구페이징은 두가지 문제를 해결해야한다. 1. 페이지교체 2. 프레임 할당

페이지교체

페이지를 적재하다보면 메모리가 가득 차게 된다. 이때 어떤 페이지를 내보낼 것인지 결정해야한다. → 페이지 교체 알고리즘

페이지 교체 알고리즘

페이지 폴트를 가장 적게 일으키는 것이 가장 좋은 알고리즘. 페이지 폴트 횟수 페이지 참조열을 가지고 판단해야한다. 아이디어에 집중해서 보자.

페이지참조열 : CPU가 참조하는 페이지들 중 연속된 숫자를 제거한 수열.

  • FIFO 페이지 교체 알고리즘 : 오래 머물렀으면 나가라

장 : 구현 간단

단 : 프로그램 내내 실행될 페이지가 아웃될 수 있다.

→ 2차 기회 페이지 알고리즘으로 업그레이드

  • 최적 페이지 교체 알고리즘 : 앞으로 오랫동안 사용되지 않을 페이지 나가

장 : 가장 낮은 페이지 폴트율

단 : 현실적으로 앞으로 실행될 페이지 예측할 수 없음

→ 페이지 교체 알고리즘 성능의 기준으로만 사용

  • LRU 페이지 교체 알고리즘 : 앞으로 오랫동안 사용되지 않은 페이지 나가 → 최적페이지 교체 알고리즘의 변형. 최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것

스레싱과 프레임 할당

프로세스에 할당된 프레임 수가 적어도 페이지 폴트는 자주 일어난다. 이 경우 프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해될 수 있는데 이를 스레싱이라고 한다.

동시에 실행되는 프로세스 수가 늘어날 수록 각 프로세스가 사용할 수 있는 프레임 수가 떨어진다. 따라서 페이지 폴트 발생이 높아지고 이로 인해 CPU이용률이 떨어지게 된다.

그렇다면 프레임 할당을 어떻게 하면 될까?

정적할당

  • 균등할당 → 각 프로세스 별 크기가 달라서 권장x
  • 비례할당 → 프로세스가 커도 많은 프레임이 필요하지 않을 수 있음. 막상 작아도 많이 필요할 수도 있다.

따라서 실행해봐야 필요한 프레임 수를 알 수 있다.

동적할당

  • 작업집합모델 : 프로세스가 특정 시간 동안 참조한 페이지 집합(작업 집합)을 기억하고 그 집합 크기만큼 페이지를 할당한다.

참조지역성 원리를 이용.

  • 페이지폴트 빈도 :페이지 폴트 빈도에 따른 프레임 할당방식

페이지 폴트 낮음 → 너무 많은 프레임 할당

페이지 폴트 높음 → 너무 적은 프레임 할당

따라서 페이지 폴트의 상한선과 하한선을 정하고 이 범위 안에서만 프레임을 할당하는 방식이다.

15 파일 시스템

15-1 파일과 디렉터리

운영체제의 파일 시스템이 관리.

파일

관련 정보의 집합. 실행정보와 부가정보가 있다.

부가정보는 다른 말로 속성 또는 메타데이터다.

파일속성과 파일유형

파일 속성 : 유형, 크기, 보호(UGO의 rwx), 생성날짜, 생성자, 소유자, 위치

파일유형 :확장자. 파일유형은 OS가 인식하는 파일종류이다. 종류에 따라 실행 방법이 달라진다.

파일연산

파일을 다루는 모든 작업은 OS가 제공하는 시스템콜을 통해 이루어진다.

디렉터리

트리구조. 최상위 디렉터리를 루트디렉터리라고 하고 슬래시(/)로 표현한다.

경로

절대경로 : 루트디렉터리에서 자기 자신까지 경로

상대경로 : 현재 위치에서 자기 자신까지 경로

디렉터리 연산

디렉터리도 마찬가지로 시스템콜을 통해 작업한다.

디렉터리 엔트리

유닉스의 모든 것은 파일이다. 디렉터리 정보는 해당 디렉터리에 담겨있는 대상과 관련된 정보를 담고 있고 이것이 표로 관리된다.

각각의 엔트리(행)은 이름, 위치정보가 포함된다.

15-2 파일시스템

운영체제 내부 프로그램. 운영체제가 보조기억장치에 파일과 디렉터리를 할당하고 접근하는 방법에 대해 배우자. → FAT파일시스템, 유닉스파일시스템

파티션과 포매팅

파티션 : 논리적인 영역을 구획.

포매팅 : 어떤 종류의 파일시스템을 사용할지 설정.

파일 시스템에는 여러 종류가 있고 파티션마다 파일시스템을 다르게 설정할 수 있다.

파일 할당 방법

운영체제는 파일과 디렉터리를 블록단위로 읽고 쓴다. 즉, 보조기억장치에 저장할 때 하나의 블록 이상에 저장된다.

하드디스크의 하나 이상의 섹터를 블록이라는 논리 단위로 묶은 것!

할당 방법은 크게 2가지 : 연속할당과 불연속 할당(연결할당, 색인할당).

연속할당

연속메모리와 똑같다. 외부단편화 문제가 발생한다.

연결할당

각 블록의 일부에 다음 블록의 주소를 저장하여 연결리스트처럼 만든 것.

외부 단편화의 문제를 해결하지만 다음과 같은 문제점들이 있다.

  1. 첫 블록부터 읽어야 한다 → 임의 접근 속도 느리다.
  2. 하드웨어 오류나 고장으로 블록이 소실되면 이후 데이터 모두 잃는다.

따라서 연결할당의 문제점들을 해결한 파일시스템이 FAT파일시스템이다.

색인할당

각 파일의 모든 블록 주소를 각 색인 블록에 모아서 관리.

임의 접근 속도 빠르다. 이를 기반으로 만들어진 파일시스템이 유닉스 파일시스템이다.

FAT파일 시스템

연결할당의 다음 블록들의 주소들을 테이블로 관리하자. → 파일할당 테이블(File Allocation Table)

  • 디렉터리 엔트리에는 파일 이름과 첫번째 블록 주소가 포함되면 된다. (다른 정보들도 많음.. 확장자, 속성, 예약영역, 생성시간 등등)
  • USB, SD card 와 같은 저용령 저장 장치에서 사용된다.
  • 파티션의 앞부분에 FAT영역이 할당된다.

간단한 예시는 P464

유닉스 파일시스템

색인 블록을 사용. 색인 블록은 다른 말로 i-node라고 한다.

  • i-node에는 파일 속성정보와 15개의 블록 주소를 저장할 수 있는 공간이 있다.
  • 파티션에 i-node영역이 따로 존재한다.
  • 15개 블록 이상의 파일을 가리키기 위해 계층형 블록 구조를 이용한다.
    • 직접 블록 : 12개의 블록
    • 단일 간접 블록 : 12개 이상일 경우 13번째에 간접 블록을 이용한다.
    • 이중 간접 블록 : 13개로도 모자르면 14번째에 이중 간접 블록을 이용한다.
    • 삼중 간접 블록 : 14개로도 모자를 때 사용.
  • 디렉터리 엔트리에 파일 이름과 i-node번호가 포함된다.

간단한 예시는 P471참고

저널링 파일 시스템

파일 시스템을 변경하는 중 강제종료(시스템 크러시)가 발생하면 파일 시스템의 모든 내용에 대해 검사하고 복구한다. 유닉스와 리눅스는 이런 방식으로 매우 오랜 시간이 걸린다.

그래서 저널링 파일 시스템이 등장했다.

  1. 작업 직전 파티션의 로그 영역에 수행하는 작업에 대한 로그를 남긴다.
  2. 작업을 수행한다.
  3. 작업이 끝나면 로그를 삭제한다.

시스템 크래시가 발생해도 로그만 읽어서 당시 실시한 작업에 대해 알아내고 해당 작업을 완료하면 된다.

마운트

한 저장 장치의 파일 시스템에서 다른 저장 장치의 파일 시스템에 접근할 수 있게 하는 것

USB를 꽂았을 때 루트디렉터리의 mnt디렉터리 하위로 USB의 루트 디렉터리가 마운트 되게 된다.

 

+   숙제

P400 1. 순서대로 최초, 최악, 최적

 

2.프로세스가 사용할 수 있는 프레임이 3개 있고, 페이지 참조열이 '2313523423' 일 때 LRU 페이지 교체 알고리즘으로 이 페이지를 참조한다면 몇 번의 페이지 폴트가 발생하는지

-> 3번

'Etc > 도서' 카테고리의 다른 글

[AI트루스]  (3) 2024.10.27
[이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접]  (0) 2024.09.29
[혼공컴운]5주차 동기화와 교착상태  (0) 2024.08.05
[혼공컴운] 4주차  (0) 2024.08.02
[혼공컴운] 3주차  (3) 2024.07.21