시스템콜 / 메모리계층 / 가상메모리

JoyJuhee·2022년 9월 22일
0

운영체제

목록 보기
4/10
post-thumbnail

1. 시스템콜

파일에 접근할 때 유저모드에서 시스템콜을 거쳐서 커널모드로 변경된 다음으로 파일 시스템으로 간다. 그 다음 파일을 올바르게 읽은 다음에 이제 유저 모드로 돌아간다.

1) 커널 : 운영체제의 핵심 부분이자 시스템콜을 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 한다.

수많은 커널 함수가 있다. 커널 안에 있는 커널 함수(native function)이 작동돼서 파일을 읽는다.

2) 유저모드 : 유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드

3) 커널모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드

4) 시스템 콜의 장점

  • 유저 프로그램은 시스템콜을 기반으로 커널과 분리가 된다.
  • 즉, 유저프로그램은 복잡한 파일 시스템과 프로세스 생성 등에 대한 내부동작을 신경쓸 필요가 없다.
  • 시스템의 안정성과 보안이 강화된다. 왜? 유저모드에서 시스템 콜로만 커널모드로 진입할 수 있게 하나의 통로만을 만들었다.

5) modebit

  • 시스템콜이 작동될 때 modebit을 기반으로 유저 모드와 커널 모드를 구분한다.
  • 1 또는 0의 값을 가지는 플래그 변수이며, 1은 유저모드, 0은 커널모드를 가리킨다.

2. 메모리 계층


1) 레지스터 : CPU 안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억 용량이 가장 적다.
2) 캐시 : L1, L2 캐시를 지칭한다. 휘발성, 속도 빠름, 기억 용량이 적다. 참고로 L3 캐시도 있다.
3) 주기억장치 : RAM을 가르킨다. 휘발성, 속도 보통, 기억 용량이 보통이다.
4) 보조기억장치 : HDD, SDD를 일컬으며 비휘발성, 속도 낮음, 기억 용량이 많다.

👉 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 필요 시마다 CPU(레지스터)에 빠르게 전달하는 역할
👉 '로딩 중'이라는 메시지가 나올 때, 이는 하드디스크 또는 인터넷에서 데이터를 읽어 RAM으로 전송하는 과정이 아직 끝나지 않음을 의미한다.

이런 계층이 있는 이유 : 경제성 때문.

3. 가상메모리와 스와핑, 페이지폴트 그리고 스레싱

1) 가상 메모리(virtual memory)

  • 메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다.

  • 물리적 메모리 부족을 보완하며 실제 마치 큰 메모리를 기반으로 멀티태스킹을 하게 할 수 있다.

  • 가상적으로 주어진 주소를 가상 주소(logical address 또는 virtual address)라고 하며, 실제 메모리상에 있는 주소를 실제 주소(physical address)

  • 가상 주소는 메모리관리장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있게 된다.

MMU가 실제 주소로 변환할 때 매핑되어있는 페이지 테이블 리스트를 기반으로 변환을 한다.

  • TLB : MMU가 바로 페이지 테이블로 가지 않고, 작은 페이지 테이블인 TLB를 통해서 변환한다. 메모리와 CPU 사이에 있는 주소 변환을 위한 캐시이다. 페이지 테이블에 있는 리스트를 보관하며 CPU가 페이지 테이블까지 가지 않도록 해 속도를 향상시킬 수 있는 캐시 계층이다.

2) 스와핑

만약에 가상 메모리는 존재하지만 실제 메모리에는 존재하지 않는 것을 페이지 폴트라고 하는데, 그게 발생하지 않은 것처럼 만든다.

중요
페이지 : 가상 메모리를 사용하는 최소 크기 단위
프레임 : 실제 메모리를 사용하는 최소 크기 단위

3) 페이지 폴트(page fault)
: 프로세스의 주소 공간에는 존재하지만 지금 이 컴퓨터의 RAM에는 없는 데이터에 접근했을 경우 발생하고 그 이후 스와핑이 작동한다.

  • CPU는 물리 메모리를 확인하여 해당 페이지가 없으면 트랩을 발생해서 운영체제에 알린다.
  • 운영체제는 CPU의 동작을 잠시 멈춘다.
  • 운영체제는 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인한다.
  • 없으면 프로세스를 중단하고 현재 물리 메모리에 비어있는 프레임을 찾는다.
  • 물리 메모리에도 없다면 스와핑이 발동된다.
  • 비어 있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화한다.
  • 중단되었던 CPU를 다시 시작한다.

4) 스레싱(thrasing)
: 페이지 폴트율이 높은 것을 의미하고 컴퓨터의 심각한 성능 저하를 초래한다.

  • 메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생한다.

  • 페이지 폴트가 일어나면 CPU 이용률이 낮아진다. CPU 이용률이 낮아지게 되면 운영체제는 'CPU가 한가한가?'라고 생각하여 가용성을 더 높이기 위해 더 많은 프로세스를 메모리에 올리게 된다. 이같은 악순환이 반복되며 스레싱이 일어나게 된다.

  • 이를 해결하기 위해 메모리를 늘리거나, HDD를 SDD로 바꾸는 방법

  • 운영체제에서 해결할 수 있는 방법은 작업세트와 PFF
    작업 세트(working set)

    프로세스의 과거 사용 이력인 지역성(locality)를 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드하는 것이다. 그러면 탐색에 드는 비용을 줄일 수 있고 스와핑 또한 줄일 수 있다.

PFF(Page Falut Frequency)

페이지 폴트 빈도를 조절하는 방법으로 상한선과 하한선을 만드는 방법.
만약 상한선에 도달하면 프레임을 늘리고 하한선에 도달하면 프레임을 줄이는 것이다.


출처 : 면접을 위한 CS전공지식 노트(책 / 강의)

0개의 댓글