파일에 접근할 때 유저모드에서 시스템콜을 거쳐서 커널모드로 변경된 다음으로 파일 시스템으로 간다. 그 다음 파일을 올바르게 읽은 다음에 이제 유저 모드로 돌아간다.
1) 커널 : 운영체제의 핵심 부분이자 시스템콜을 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 한다.
수많은 커널 함수가 있다. 커널 안에 있는 커널 함수(native function)이 작동돼서 파일을 읽는다.
2) 유저모드 : 유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드
3) 커널모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드
4) 시스템 콜의 장점
5) modebit
1) 레지스터 : CPU 안에 있는 작은 메모리, 휘발성, 속도 가장 빠름, 기억 용량이 가장 적다.
2) 캐시 : L1, L2 캐시를 지칭한다. 휘발성, 속도 빠름, 기억 용량이 적다. 참고로 L3 캐시도 있다.
3) 주기억장치 : RAM을 가르킨다. 휘발성, 속도 보통, 기억 용량이 보통이다.
4) 보조기억장치 : HDD, SDD를 일컬으며 비휘발성, 속도 낮음, 기억 용량이 많다.
👉 램은 하드디스크로부터 일정량의 데이터를 복사해서 임시 저장하고 이를 필요 시마다 CPU(레지스터)에 빠르게 전달하는 역할
👉 '로딩 중'이라는 메시지가 나올 때, 이는 하드디스크 또는 인터넷에서 데이터를 읽어 RAM으로 전송하는 과정이 아직 끝나지 않음을 의미한다.
❓ 이런 계층이 있는 이유 : 경제성 때문.
1) 가상 메모리(virtual memory)
메모리 관리 기법의 하나로 컴퓨터가 실제로 이용 가능한 메모리 자원을 추상화하여 이를 사용하는 사용자들에게 매우 큰 메모리로 보이게 만드는 것을 말한다.
물리적 메모리 부족을 보완하며 실제 마치 큰 메모리를 기반으로 멀티태스킹을 하게 할 수 있다.
가상적으로 주어진 주소를 가상 주소(logical address 또는 virtual address)라고 하며, 실제 메모리상에 있는 주소를 실제 주소(physical address)
가상 주소는 메모리관리장치(MMU)에 의해 실제 주소로 변환되며, 이 덕분에 사용자는 실제 주소를 의식할 필요 없이 프로그램을 구축할 수 있게 된다.
MMU가 실제 주소로 변환할 때 매핑되어있는 페이지 테이블 리스트를 기반으로 변환을 한다.
2) 스와핑
만약에 가상 메모리는 존재하지만 실제 메모리에는 존재하지 않는 것을 페이지 폴트라고 하는데, 그게 발생하지 않은 것처럼 만든다.
중요
❓ 페이지 : 가상 메모리를 사용하는 최소 크기 단위
❓ 프레임 : 실제 메모리를 사용하는 최소 크기 단위
3) 페이지 폴트(page fault)
: 프로세스의 주소 공간에는 존재하지만 지금 이 컴퓨터의 RAM에는 없는 데이터에 접근했을 경우 발생하고 그 이후 스와핑이 작동한다.
4) 스레싱(thrasing)
: 페이지 폴트율이 높은 것을 의미하고 컴퓨터의 심각한 성능 저하를 초래한다.
메모리에 너무 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생한다.
페이지 폴트가 일어나면 CPU 이용률이 낮아진다. CPU 이용률이 낮아지게 되면 운영체제는 'CPU가 한가한가?'라고 생각하여 가용성을 더 높이기 위해 더 많은 프로세스를 메모리에 올리게 된다. 이같은 악순환이 반복되며 스레싱이 일어나게 된다.
이를 해결하기 위해 메모리를 늘리거나, HDD를 SDD로 바꾸는 방법
운영체제에서 해결할 수 있는 방법은 작업세트와 PFF
❓ 작업 세트(working set)
프로세스의 과거 사용 이력인 지역성(locality)를 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드하는 것이다. 그러면 탐색에 드는 비용을 줄일 수 있고 스와핑 또한 줄일 수 있다.
❓ PFF(Page Falut Frequency)
페이지 폴트 빈도를 조절하는 방법으로 상한선과 하한선을 만드는 방법.
만약 상한선에 도달하면 프레임을 늘리고 하한선에 도달하면 프레임을 줄이는 것이다.
출처 : 면접을 위한 CS전공지식 노트(책 / 강의)