CS 스터디 운영체제 #2(상윤)

1. 메모리

: 운영체제에서 메모리 관리란 컴퓨터의 메인 메모리 관리를 담당하는 기능이다. 이 역할을 담당하는 장치가 MMU이다. MMU란 CPU 코어 안에 탑재되어 가상 주소를 실제 메모리 주소로 변환해주는 장치이다.

가상 주소(논리 주소)

  • 프로세스마다 독립적으로 가지는 주소 공간
  • 각 프로세스마다 0번지부터 시작
  • CPU가 보는 주소는 logical address

물리 주소

  • 메모리에 실제 올라가는 위치
    MMU 동작 원리

1) CPU가 프로세스 P1 의 논리 주소 346을 요청

2) P1은 물리 주소 14000 – 17000에 올라가 있음

3) P1이 자신의 메모리 범위(3000)을 벗어나는 주소를 요청할 경우를 막기 위해 limit register의 값과 비교를 한다.

3-1) limit register보다 요청 주소가 크다면 trap interrupt 발생 후 운영체제로 제어 권한을 이전한다. (안정성을 위해서 base와 limit레지스터는 kernel level에서만 수정 가능하도록 설계한다.)

4) 시작 위치 물리 주소인 base register에 논리 주소를 더해서 돌려줌(14000 + 346)

  • 메모리 과할당 (Memory Over Allocating)
    : 실제 메모리 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당한 상황 페이지 기법과 같은 메모리 관리 기법은 사용자가 눈치 채지 못하도록 눈속임을 통해 메모리를 할당해준다.

메모리 과할당 발생 상황

  • 프로세스 실행 도중 페이지 폴트 발생
  • 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾음
  • 메모리의 빈 프레임에 페이지를 올려야 하는데, 모든 메모리가 사용 중이라 빈 프레임이 없음

이러한 과할당을 해결하기 위해선, 빈 프레임을 확보할 수 있어야 한다.

  • 메모리에 올라와 있는 한 프로세스를 종료 시켜 빈 프레임을 얻음
  • 프로세스 하나를 swap out하고, 이 공간을 빈 프레임으로 활용

swapping 기법을 통해 공간을 바꾸는 2번 방법과는 달리 1번은 사용자에게 Paging 시스템을 들킬 가능성이 매우 높아서 하면 안된다.

(Paging 기법은 사용자 모르게 시스템 능률을 높이기 위해 선택한 일이므로 들키지 않게 처리해야함)

따라서, 2번과 같은 해결책을 통해 페이지 교체가 이루어져야 한다.

  • Swapping
    : 프로세스를 일시적으로 메모리에서 backing store로 쫓아내는 것

  • backing store(=swap area)
    : 디스크 (많은 사용자의 프로세스 이미지를 담을 만큼 충분히 빠르고 큰 저장 공간

※ Paging 시스템에서 일부 페이지가 메모리에서 쫓겨날 때도 swap out 이라고 표현하지만 원칙적으로 swap out은 프로그램을 구성하는 메모리 전부가 쫓겨남을 의미

[ 페이지 교체 ]

  • 메모리 과할당 상태일 경우 빈 프레임이 있으면 빈 프레임을 사용
  • 빈 프레임이 없으면 victim 프레임을 선정해 디스크에 기록하고 페이지 테이블을 업데이트함
  • 이 때 사용자가 페이지 교체를 알 수 없게 하기 위해 오버헤드를 최소화해야 한다.

[ 오버헤드를 감소시키는 해결법]
이처럼 빈 프레임이 없는 상황에서 victim 프레임을 비울 때와 원하는 페이지를 프레임으로 올릴 때 두 번의 디스크 접근이 이루어진다.

페이지 교체가 많이 이루어지면, 이처럼 입출력 연산이 많이 발생하게 되면서 오버헤드 문제가 발생한다.

(1) 변경 비트를 모든 페이지마다 둬서, victim 페이지가 정해지면 해당 페이지의 비트를 확인(인덱싱 or flag)

  • 해당 비트가 set 상태
    : 해당 페이지 내용이 디스크 상의 페이지 내용과 달라졌다는 뜻 (페이지가 메모리 올라온 이후 한번이라도 수정이 일어났던 것. 따라서 이건 디스크에 기록 해야함)

  • 해당 비트가 clear 상태
    : 디스크 상의 페이지 내용과 메모리 상의 페이지가 정확히 일치하는 상황 (디스크와 내용이 같아서 기록할 필요가 없음)

비트를 활용해 디스크에 기록하는 횟수를 줄이면서 오버헤드에 대한 수를 최대 절반으로 감소시키는 방법이다.

(2) 페이지 교체 알고리즘을 상황에 따라 잘 선택해야 한다.

현재 상황에서 페이지 폴트를 발생할 확률을 최대한 줄여줄 수 있는 교체 알고리즘을 사용

FIFO(First In First Out), OPT(Optimal Replacement), LRU(Least Recently Used), NUR(Not Used Recently), LFU(Least Frequently Used)

  • OPT (Optimal replacement, 최적 교체)
    : 미래를 보고 앞으로 가장 사용되지 않을 페이지를 교체해준다. 앞으로 사용되지 않을 페이지에 대해 알 수 없으므로 비현실적인 방법이다.

5라는 페이지를 참조할 때 페이지 프레임의 상태는 (2, 3, 1)이다. 여기서 1을 내보내고 5를 넣었다. 이렇게 한 이유는 앞으로 2,3,5는 사용되지만 1은 사용되지 않으므로 1을 내보낸 것이다.

  • 캐시 메모리
    : 주기억장치에 저장된 내용의 일부를 임시로 저장해두는 기억장치, CPU와 주기억장치의 속도 차이로 성능 저하를 방지하기 위한 방법

CPU가 이미 봤던걸 다시 재접근할 때, 메모리 참조 및 인출 과정에 대한 비용을 줄이기 위해 캐시에 저장해둔 데이터를 활용한다

캐시는 flip flop(1비트 소자) 소자로 구성되어 SRAM으로 되어있어서 DRAM보다 빠른 장점을 지녔다.

  • CPU와 기억장치의 상호작용
    CPU에서 주소를 전달 → 캐시 기억장치에 명령이 존재하는지 확인

1) 존재(Hit)하면 해당 명령어를 CPU로 전송
2) 존재하지 않으면(Miss) 명령어를 갖고 주기억장치로 접근
→ 해당 명령어를 가진 데이터 인출
→ 해당 명령어 데이터를 캐시에 저장
→ 해당 명령어를 CPU로 전송

따라서 CPU가 어떤 데이터를 원할지 어느정도 예측할 수 있어야 한다. (캐시에 많이 활용되는 쓸모 있는 정보가 들어있어야 성능이 높아짐)

  • 지역성
    : 기억 장치 내의 정보를 균일하게 액세스 하는 것이 아니라 한 순간에 특정부분을 집중적으로 참조하는 특성, 캐시의 효율성을 위해서 사용된다.

시간 지역성: 최근에 참조된 주소의 내용은 곧 다음에도 참조되는 특성
공간 지역성: 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성

  • 캐싱 라인
    : 빈번하게 사용되는 데이터들을 캐시에 저장했더라도, 내가 필요한 데이터를 캐시에서 찾을 때 모든 데이터를 순회하는 것은 시간 낭비다. 즉, 캐시에 목적 데이터가 저장되어있을 때 바로 접근하여 출력할 수 있어야 캐시 활용이 의미 있어진다.

따라서 캐시에 데이터를 저장할 시 특정 자료구조를 사용하여 묶음으로 저장하는데 이를 캐싱 라인이라고 부른다.

1) Direct Map

가장 기본적인 구조로, DRAM의 여러 주소가 캐시 메모리의 한 주소에 대응되는 다대일 방식. 간단하고 빠르지만 conflict Miss 발생

2) Full Associative

비어있는 캐시 메모리가 있으면, 마음대로 주소를 저장하는 방식. 저장할 때는 매우 간단하지만, 찾을 때가 복잡함.

3) Set Associative

Direct + Full 방식이다. 특정 행을 지정하고, 그 행 안의 어떤 열이든 비어있을 때 저장하는 방식. Direct에 비해 검색 속도는 느리지만 저장이 빠르고, Full에 비해 저장 속도는 느리지만 검색은 빠르다.


2. 파일 시스템

파일: 의미 있는 정보를 담는 논리적인 단위, 레코드 혹은 블록 단위로 보조 기억장치에 저장

  • 파일 시스템 등장 배경
    파일은 정보를 저장할 수 있는 기억 장소 공간이 디스크에 할당되어 있으며 디스크에 존재하는 다른 파일들과 구별할 수 있는 고유의 이름이 존재한다. 디스크에 저장된 파일은 프로세스가 수행을 완료하고 파괴된 후에라도 여전히 남아있게 된다. 이렇게 저장되는 데이터가 점점 많아지면서 그 데이터를 관리하지 않으면 파일을 읽고 쓰는데 많은 자원을 사용하게 되고, 다른 작업에 부하가 걸리게 된다. 그래서 파일 시스템이 효율적으로 파일을 관리할 필요가 생겼다.

  • 파일 시스템의 종류

  1. FAT(File Allocation Table)
    : 파일을 할당한 정보를 테이블로 표현한 것이다. 구조가 간단하여 현재에도 많이 사용되고 있다. Reserved Area, FAT Area, DATA Area로 구성되어 있다.
  2. NTFS(New Technology File System)
    : 현재 윈도우에서 흔히 사용하는 파일 시스템이다. VBR(Volume Boot Record), MFT(Master File Table), DATA Area로 구성되어 있다.
  3. Ext(Extended File System)
    : Ext는 리눅스에서 사용되는 파일 시스템이다. Ext, Ext2, Ext3 등 숫자가 높을수록 더 나중에 나온 것이며 현재는 Ext3가 보편적으로 사용되고 있다.
  • 파일 시스템의 특징
    1) kernel 영역에서 동작
    2) 파일 CRUD 기능을 원활하게 수행하기 위한 목적
    3) 계층적 directory 구조를 가진다.
    4) 디스크 파티션 별로 하나씩 둘 수 있음

  • 접근 방법

1) 순차 접근(Sequential Access)

: 가장 간단한 접근 방법이며 파일의 정보가 레코드 순서대로 차례차례 처리된다. 읽기는 파일의 다음 부분부터 차례로 읽어 나가며 자동적으로 현재 위치를 추적하는 파일 포인터(offset)가 자동으로 증가 된다. 쓰기 작업은 파일의 끝에 추가하며 새로운 파일의 끝으로 파일 포인터가 이동한다. Offset을 맨 앞이나 맨 뒤로 옮길 수도 있고, n개의 레코드 만큼 앞뒤로 건너뛸 수도 있다.

2) 직접 접근(Direct Access)

: 직접 접근을 위해서 파일은 고정 길이의 논리 레코드의 집합으로 정의되고 직접 접근 파일은 어떠한 블록이라도 직접 접근할 수 있다. 직접 접근 파일에는 읽거나 쓰기의 순서에 제약이 없다. 직접 접근 파일은 대규모의 정보를 즉각적으로 접근하는 데 아주 유용하며, 대규모 DB가 이러한 유형이다.

3) 기타 접근

: 파일에서 레코드를 찾기 위해서 먼저 이 색인부터 찾아 그에 대응하는 포인터를 얻는다. 그런 다음 그 포인터를 사용하여 파일에 직접 접근하여 원하는 레코드를 찾는다. 크기가 큰 파일을 입출력 탐색할 수 있게 도와주는 방법이다.

  • Directory와 Disk 구조

1) 1단계 Directory
: 모든 파일이 Directory 밑에 있기 때문에 지원하기 쉽고 이해하기도 쉽다. 그러나 파일이 많아지거나 다수의 사용자가 사용하는 시스템에서는 심각한 제약을 가지고 있다.

2) 2단계 Directory
: 각 사용자는 자신만의 파일 Directory를 가진다. 이 구조는 사용자들을 서로 격리시킬 수 있다. 하지만 협력 작업에 있어서는 이 구조가 단점이 된다.

3) Tree 구조 Directory

: 사용자들이 자신의 Sub Directory를 만들어서 파일을 구성할 수 있게 된다. 트리 구조는 하나의 루트 Directory를 가지며 시스템의 모든 파일은 고유한 경로 이름을 가지게 된다. 또한 비트가 0인지 1인지를 통해 일반 파일인지 Directory 파일인지를 구분한다.

4) Graph 구조 Directory

: 순환이 발생하지 않도록 하위 디렉터리가 아닌 파일에 대한 링크만 허용하거나, Garbage Collection을 이용해 전체 파일 시스템을 순회하고 접근 가능한 모든 것을 표시한다.

좋은 웹페이지 즐겨찾기