[혼공단] 6주차_컴퓨터구조 + 운영체제

Algo rhythm·2024년 2월 5일
0

혼공단

목록 보기
12/13

1. 가상 메모리

1.1. 연속 메모리 할당

  • 연속 메모리 할당 : 프로세스A가 메모리를 차지하면, 프로세스B가 A의 메모리 다음 자리를 차지하듯, 프로세스에게 순차적으로 메모리의 공간을 할당하는 방식

1.1.1. 스와핑

  • 현재 실행되지 않는 프로세스의 일부를 메모리에서 보조기억장치로 보내고 빈 메모리 공간을 다른 프로세스로 적재하여 실행하는 방식
  • 스왑 영역 : 쫓겨난 프로세스가 가는 보조기억장치의 일부 영역
  • 스왑 아웃 : 실행되지 않은 프로세스가 메모리에서 스왑 영역으로 옮겨지는 것
  • 스왑 인 : 스왑 영역에서 프로세스가 메모리로 돌아오는 것
    • 프로세스가 스왑 아웃되기 전의 메모리 주소와 달라질 수 있다.
  • 스와핑을 통해 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메모리 ㅡ기보다 큰 경우에도 프로세스들을 동시 실행 가능

1.1.2. 메모리 할당

  • 최초 적합 : 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 가장 먼저 발견한 적재 가능 공간에 프로세스를 배치 -> 빈 공간 검색을 최소화
  • 최적 적합 : 운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 가장 작은 공간에 배치
  • 최악 적합 : 빈 공간을 모두 검색한 다음 가장 큰 메모리 공간에 배치

1.1.3. 외부 단편화

  • 메모리에 프로세스들이 순차적으로 적재되어 실행되면, 먼저 작업이 끝난 프로세스가 메모리에서 이탈하며 메모리의 빈 공간이 듬성듬성 생기게 된다. 각각의 빈 공간에는 수용 가능한 프로세스만 담을 수 있어서 큰 메모리를 요구하는 프로세스는 메모리에 빈 공간에 접근할 수 없어 비효율적이다.

1.1.3.1. 외부 단편화 해결 방안

  • 압축 : 메모리 조각 모음
    • 단점 : 메모리 조각을 모으는 동안 시스템이 하던 일을 중지 및 오버헤드 야기
  • 가상 메모리 기법

1.1.4. 확인 문제

  • 최초 적합 : 최초로 발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식
  • 최악 적합 : 프로세스가 적재될 수 있는 가장 큰 공간에 프로세스를 배치하는 방식
  • 최적 적합 : 프로세스가 적재될 수 있는 가장 작은 공간에 프로세스를 배치하는 방식

1.2. 가상 메모리 기법

  • 가상 메모리 : 실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 더 큰 프로세스를 실행

1.2.1. 페이징 기법

  • 프로세스들을 일정 단위로 쪼개어 조각 난 프로세스 조각을 메모리에 불연속적으로 적재하여 실행
  • 페이지 : 프로세스의 논리 주소 공간을 일정 단위로 자름
  • 프레임 : 메모리 물리 주소 공간
  • 페이지와 프레임을 일정하고 동일한 크기로 자른 뒤, 페이지를 프레임에 할당
  • 페이지 아웃 : 페이징 시스템에서의 스왑 아웃
  • 페이지 인 : 페이징 시스템에서의 스왑 인

1.2.1.1. 페이징 기법 단점

  1. 프로세스가 불연속적으로 적재되어 있기에 CPU가 각 프레임에 적재된 페이지 정보를 알 수 없음, 다음 실행할 명령어 위치 파악 난감
  2. 내부 단편화 문제 : 페이지로 프로세스를 잘랐으나 딱 맞게 나누어 떨어지지 않는 프로세스 파편으로 인해 발생하는 메모리 낭비

1.2.1.2. 페이징 기법 단점의 해결 - 페이지 테이블

  • 물리주소에는 불연속적으로 배치되어도 논리 주소에는 연속적으로 배치되도록 함
  • 페이지 테이블 : 페이지 번호와 프레임 번호가 매칭되도록 하는 곳
  • 페이지 테이블 베이스 레지스터(PTBR - Page Table Base Register) : 각 프로세스의 페이지 테이블이 적재된 주소, CPU 내에 존재
  • CPU는 페이지 테이블을 통해 각 프로세스 조각이 적재된 프레임 주소를 파악
  • 페이지 테이블의 정보는 프로세스의 PCB에 기록됨

1.2.1.3. 페이지 테이블에 대한 고려 사항

  • 페이지 크기가 크면 내부 단편화 문제 발생, 페이지 크기가 작으면 페이지 테이블이 커져 메모리 낭비됨
  • 대형 페이지(huge page) : 기본적으로 설정된 페이지 사이즈보다 크면, 대형 페이지
  • 페이지 테이블이 메모리에 있다면 메모리 접근 시간이 두 배로 늘어나 처리되는데 오래 걸린다.
    • 페이지 테이블 정보 읽기 1회
    • 페이지 테이블 정보를 통해 메모리 프레임에 접근 1회
    • 총 2회의 메모리 접근

1.2.1.4. 페이지 테이블의 메모리 접근 횟수 감소를 위한 방안 - TLB

  • Translation Lookaside Buffer(TLB) : 페이지 테이블의 캐시 메모리, 페이제 테이블의 일부 내용을 저장. 참조 지역성에 근거해 주로 최근에 사용된 페이지 위주로 저장
  • TLB 히트 : CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 있을 경우
  • TLB 미스 : CPU가 발생한 논리 주소에 대한 페이지 번호가 TLB에 없을 경우

1.2.1.5. 페이징에서의 주소 변환 방법

  • 하나의 페이지 혹은 프레임은 여러 주소를 포괄하고 있기에 특정 주소에 접근하려면 두 가지 정보가 필요하다
  1. 어떤 페이지 혹은 프레임에 접근하려는지
  2. 접근하려는 주소가 그 페이지 혹은 프레임으로부터 얼마나 떨어져 있는지
  • 따라서 페이징 시스템에서의 모든 논리 주소는 페이지 번호변위로 구성되어 있음
  • CPU가 32비트 주소를 내보냈다면 N비트=페이지 번호, 32-N비트= 변위로 구성됨
  • 페이지 번호 : 접근하고자 하는 페이지의 번호, 페이지 테이블에서 페이지 번호를 찾으면 페이지가 어떤 프레임에 할당 되었는지 확인 가능
  • 변위 : 접근하려는 주소가 프레임의 시작 번지로부터 얼마나 떨어져 있는지를 나타냄
  • 논리 주소의 '페이지 번호' + '변위'를 가지고 페이지 테이블을 통해 물리 주소의 '프레임 번호' + '변위'로 변환된다.

1.2.1.6. 페이지 테이블 엔트리

  • 페이지 테이블 엔트리 : 페이지 테이블의 각각의 행들
  • 페이지 번호, 프레임 번호 외에 다른 정보도 포함되어 있음
    1. 유효 비트 : 현재 해당 페이지에 접근 가능 여부 표시, 현재 페이지가 메모리와 보조기억장치 중 어느 곳에 적재되어 있는지를 판단함. 메모리(1), 보조기억장치(0)
      • 페이지 폴트 : 메모리에 적재되어 있지 않은 페이지로 접근할 때 발생하는 예외
      • 페이지 폴트 처리 과정
        가. CPU는 기존 작업 내역을 백업
        나. 페이 폴트 처리 루틴 실행
        다. 페이지 처리 루틴은 원하는 페이지를 메모리로 가져온 뒤 유효 비트를 1로 변경
        라. 페이지 폴트를 처리했다면 CPU는 해당 페이지에 접근 가능
    2. 보호 비트 : 페이지 보호 기능, 해당 페이지의 읽기, 쓰기 가능 여부 확인. 읽기 전용 페이지에 쓰기를 시도하면 운영체제가 제재함.
      • r(read), w(write), x(execute)로 구성 가능
    3. 참조 비트 : CPU가 이 페이지에 접근한 적이 있는지를 나타냄
    4. 수정 비트(더티 비트) : 해당 페이지에 데이터를 쓴 적이 없는지 수정 여부를 나타냄.
      • 페이지가 메모리에서 사라질 때 보조기억장치에 쓰기 작업을 해야 하는지 여부를 판가름하기 위해 존재
      • 메모리에서 쓰기 작업을 통해 수정이 발생한 경우, 보조기억장치에 기존의 파일 내용을 덮어써야한다. 이를 확인하기 위해 존재하는 비트

1.2.1.7. 페이징의 이점

  1. 외부 단편화 문제 해결
  2. 프로세스 간에 페이지를 공유 - 쓰기 시 복사
    • 쓰기 시 복사 : 부모 프레세스 또는 자식 프로세스 둘 중에 하나가 페이지에 쓰기 작업을 하면 그 순간 해당 페이지가 별도의 공간으로 복제되어 각 프로세스는 자신의 고유한 페이지가 할당된 프레임을 가리킨다.
    • 프로세스 생성 시간 단축 및 메모리 절약

1.2.1.8. 계층적 페이징

  • 모든 테이블 엔트리를 항상 메모리에 유지하면 낭비가 되므로 이를 보완 하는 방법
  • 다단계 페이지 테이블 기법 : 페이지 테이블을 페이징하여 여러 단계의 페이지를 두는 방식
    • 페이지 테이블을 여러 개의 페이지로 쪼개고, 이 페이지들을 가리키는 페이지 테이블을 두는 방식(outer 페이지 테이블). 대신 outer 페이지 테이블은 항상 메모리에 유지

1.3. 페이지 교체와 프레임 할당

1.3.1. 요구 페이징

  • 필요한 페이지만을 메모리에 적재하는 기법

1.3.1.1. 요구 페이징의 진행 순서

  1. CPU가 특정 페이지에 접근 명령
  2. 해당 페이지가 현재 메모리에 있을 경우(유효 비트 1), CPU는 페이지가 적재된 프레임에 접근
  3. 해당 페이지가 현재 메모리에 없을 경우(유효 비트 0), 페이지 폴트 발생
  4. 페이지 폴트 처리 루틴은 해당 페이지를 메모리로 적재하고 유효 비트를 1로 설정
  5. 다시 1번을 수행

1.3.1.2. 순수 요구 페이징

  • 아무런 페이지도 메모리에 적재하지 않고 실행하여 프로세스의 첫 명령어를 실행하는 순간부터 페이지 폴트 발생, 실행에 필요한 페이지가 어느 정도 적재된 이후부터 페이지 폴트 발생 빈도 급감

1.3.1.3. 요구 페이징 시스템의 필수 조건

  1. 페이지 교체 : 효율적인 메모리 사용을 위해 메모리에 적재된 페이지를 보조기억장치로 보냄
    • 페이지 교체 알고리즘 : 보조기억장치로 보낼 페이지를 결정하는 알고리즘
  2. 프레임 할당

1.3.2. 페이지 교체 알고리즘

  • 페이지 폴트가 적을수록 좋은 알고리즘을 의미
  • 페이지 참조열을 통해 페이지 폴트 횟수를 알 수 있어야 함.

1.3.2.1. FIFO 페이지 교체 알고리즘

  • 가장 먼저 올라온 페이지부터 내쫓는 방식
  • 2차 기회 페이지 교체 알고리즘 : 메모리에 오래 머무른 페이지 중에 참조비트가 0인 페이지는 오랫동안 사용되지 않은 페이지로 인식하여 보조기억장치로 보낸다.

1.3.2.2. 최적 페이지 교체 알고리즘

  • CPU에 의해 참조되는 횟수를 반영하여 자주 사용될 페이지를 선별
  • 가장 낮은 페이지 폴트율을 보장
  • 오랫동안 사용되지 않을 페이지를 예측하는 것이 어려워서, 다른 페이지 교체 알고리즘의 성능 평가 기준으로 활용함.

1.3.2.3. LRU 페이지 교체 알고리즘

  • Least Reccently Used Page Replacement Algorithm
  • 오랫동안 사용하지 않은 페이지가 앞으로도 사용되지 않을 것이라는 시각을 토대로 작성

1.3.2. 스래싱과 프레임 할당

1.3.2.1. 스래싱

  • 스래싱(thrashing) : 프로세스가 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제
  • 멀티프로그래밍의 정도 : 메모리에서 동시에 실행되는 프로세스의 수
  • 스래싱의 원인 : 각 프로세스가 필요로 하는 최소한의 프레임 수가 보장되지 않았기 때문

1.3.2.2. 프레임 할당

  • 정적 할당 방식 : 프로세스의 크기와 물리 메모리의 크기만을 고려한 할당 방식
    • 균등 할당 : 모든 프로세스에 동일한 수의 프레임을 할당
    • 비례 할당 : 프로세스 크기에 맞게 할당
  • 동적 할당 방식 : 프로세스의 실행을 보고 할당할 프레임 수를 결정
    • 작업 집합 모델 : 프로세스가 일정 기간 동안 참조한 페이지 집합을 기억하여 비번한 페이지 교체를 방지
    • 페이지 폴트 빈도 : 페이지 폴트율에 상한선과 하한산을 정하고 그 내부 범위안에서만 프레임을 할당하는 방식

2. 파일 시스템

2.1. 파일과 디렉터리

  • 파일 : 하드 디스크나 SSD와 같은 보조기억장치에 저장된 관련 정보의 집합

2.1.1. 파일의 구성

  • 속성(메타데이터) : 파일의 형식, 위치, 크기, 보호, 생성 날짜, 마지막 접근 날짜, 마지막 수정 날짜, 생성자, 소유자 정보를 기록
  • 확장자 : 파일의 유형을 알리는 방법
  • 생성/삭제, 열기/닫기, 읽기/쓰기의 시스템 호출 제공

2.1.2. 디렉터리(폴더)

  • 1단계 디렉터리 : 모든 파일이 하나의 디렉터리 아래에 있는 경우
  • 트리 구조 디렉터리 : 여러 계층으로 구성된 디렉터리
  • 루트 디렉터리 : 최상위 디렉터리
  • 보조기억장치에 테이블 형태의 정보로 저장

2.1.2.1. 절대 경로와 상대 경로

  • 절대 경로 : 루트 디렉터리에서 자기 자신까지 이르는 고유 경로
  • 상대 경로 : 현재 디렉터리부터 사용하는 경로

2.2. 파일 시스템

  • 파일과 디렉터리를 보조기억장치에 일목요연하게 저장하고 접근할 수 있게 하는 운영체제 내부 프로그램

2.2.1. 파티셔닝

  • 파티션닝 : 저장 장치의 논리적인 영역을 구획하는 작업
  • 파티션 : 파티셔닝 작업으로 나누어진 영역

2.2.2. 포매팅

  • 파일 시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할 것인지를 결정하고, 새로운 데이터를 쓸 준비를 하는 작업을 의미
  • 파티션 마다 다른 파일 시스템을 설정 가능

2.2.2.1. 파일 할당 방법

  • 하드 디스크의 포맷팅이 끝나면 운영체제는 파일과 디렉터리를 블록 단위로 읽고 씀.
  • 하나 이상의 섹터(하드 디스크의 가장 작은 용량 단위)를 하나의 블록으로 단위로 묶어 블록 단위로 파일과 디렉터리를 관리
    파일 할당
  • 연속 할당 : 보조기억장치 내 연속적인 블록에 파일을 할당
    • 파일의 첫 번째 블록 주소와 블록 단위의 길이만 알면 됨
    • 단순하지만 외부단편화 문제 야기
  • 불연속 할당
    • 연결 할당 : 각 블록 일부에 다음 블록의 주소를 저장하여 각 블록이 다음 블록을 가리키는 형태로 할당
      • 연속 할당의 외부 단편화 문제 해결
      • 반드시 파일의 첫 번째 블록부터 접근하여 차례대로 읽어야함. -> 임의 접근 속도가 매우 느림
      • 하드웨어 고장이나 오류 발생 시 해당 오류 접근 불가
    • 색인 할당 : 파일의 모든 블록 주소를 색인 블록(index block)에서 관리
      • 파일 내 임의의 접근 용이
      • 디렉터리 엔트리에 색인 블록 주소 명시

2.2.2.2. FAT 파일 시스템

  • 연결 할당의 단점(블럭 안에 다음 블록의 주소를 저장) 보완
  • 파일 할당 테이블(File Allocation Table)
  • 디렉터리 엔트리에 파일 이름과 파일의 첫 번째 블록 주소를 명시
  • FAT가 메모리에 적재되어 실행되면 임의 접근 성능이 개선됨
  • 파티션 구성 예시

2.2.2.3. 유닉스 파일 시스템

  • 색인 할당 기반의 유닉스 시스템
  • 색인 블록(index-node) 기반으로 파일의 데이터 블록들을 찾는 방식
  • 유닉스 파일 시스템의 파티션 구성
  • i-node 하나는 여다섯 개의 블록을 차지하는 파일을 가리킬 수 있음
  • 20개 이상의 블록을 차지하는 파일을 가리키는 방법
    1. i-node 하나가 가리키는 15개 중 12개의 블록에 파일 데이터가 저장된 블록주소를 직접 명시(직접 블록이라 지칭)
    2. i-node의 13 번째 블록 주소는 단일 간접 블록의 주소를 저장(단일 간접 블록 - 파일 데이터가 저장된 블록이 아닌 파일 데이터를 저장한 블록 주소가 저정된 블록)
    3. i-node의 14 번째 블록 주소는 이중 간접 블록 주소를 저장(이중 간접 블록 - 데이터 블록 주소를 저장하는 블록 주소가 저장된 블록, 단일 간접 블록들의 주소를 저장하는 블록)
    4. i-node의 15 번째 블록 주소는 삼중 간접 블록의 주소를 저장(삼중 간접 블록 - 이중 간접 블록 주소가 저장된 블록)

2.2.2.3. 저널링 파일 시스템

  • 시스템 크래시 : 파일 시스템을 변경 도중 전원이 나가거나 치명적인 오류로 컴퓨터가 강제종료 되어 버린 상황
  • 저널링 기법 : 작업 로그를 통해 시스템 크래시가 발생했을 때 빠르게 복구하기 위한 방법
  • 파일 시스템 변경 작업의 순서
    1. 작업 직전 파티션의 로그 영역에 수행하는 작업(변경 사항)에 대한 로그를 남김
    2. 로그를 남긴 후 작업을 수행
    3. 작업이 끝났다면 로그를 삭제
  • 파일 시스템이 남긴 로그를 읽고 수행 중이던 작업을 이어서 진행

2.2.2.4. 마운트

  • 한 저장 장치의 파일 시스템에서 다른 저장 장치의 파일 시스템에 접근할 수 있도록 파일 시스템을 편입시키는 작업
profile
배운 건 써 먹자

0개의 댓글