chat GPT를 적극적으로 활용하여 빠른 생산성을 확보하는 것이 우선이 될 것이다.
가상 메모리를 할당하는 함수
가상 메모리의 주소를 받고 받은 용량만큼 할당하는데…
비슷한 방식으로 메모리를 할당하는데도 시간은 10배 차이가 남 (1389 , 112)
이러한 현상을 해석하고 이해할 수 있어야 한다.
이유는 CPU의 캐시 메모리
캐시에 못 올릴 정도의 큰 용량(1gb)을 할당하였어도 (캐시 메모리를 활용하지 않아도) 속도 차이가 있다. (296, 155)
가상 메모리에서 계산한 만큼 실제 메모리에서 demand page 하기 때문에(첫 번째 과정에서는) 속도 차이가 나는 것이다.
모든 computer science 에서 가장 중요한 개념 딱 하나는? -
layers of abstraction? Problem decomposition 문제를 따로 따로 쪼개서 해결하기
What is the conclusion?
Building an abstraction that gives an illusion that each application runs on a single machine
Let’s call it process (= executed application)
CPU → Virtualizing CPU
Memory -> Virtual address space
Storage -> File
하드웨어는 -> 추상화되고 이렇게 추상화 된 개념들을 묶어서 프로세스라는 개념이 된다.
즉, 프로세스는 컴퓨터의 추상화다.
How to map virtual to physical address?
가상 주소와 물리 주소를 연결하는 함수를 OS가 만든다. : Paging
cpu 내의 memory management unit 이라는 하드웨어가 logical address 와 physical address를 번역
OS가 허용하지 않는(illegal) 메모리 영역(kernel address)에 접근하려고 할 때, page fault가 발생
fault handler는 SIGSEGL 이라는 signal을 보냄 → segmentation fault가 발생하고 프로세스가 죽는다.
이 과정에서 OS가 만든 page table을 보고 hardware가 이 주소가 legal 한지 illegal 한지 구별한다.
TLB cache란? (Chat GPT 선생이 알려주심)
TBL(Translation Lookaside Buffer) 캐시는 컴퓨터 아키텍처와 운영 체제에서 주로 사용되는 메모리 관리 기술 중 하나입니다. 이 캐시는 가상 메모리 주소와 실제 물리적 메모리 주소 간의 매핑 정보를 저장하고, 이를 사용하여 가상 주소에서 물리 주소로의 변환을 빠르게 수행합니다. 주로 가상 메모리 시스템에서 페이지 테이블을 관리하는 데 사용되며, 주요 목적은 주소 변환의 속도를 향상시키는 것입니다.
TBL 캐시의 주요 특징과 동작 방식에 대해 알아보겠습니다:
캐시 역할:
TBL 캐시는 주소 변환 정보를 저장하는 캐시 메모리로, 가상 주소를 물리 주소로 변환하는 작업을 빠르게 수행하기 위해 사용됩니다. 주로 CPU의 메모리 관리 유닛(MMU)에 위치하며, 페이지 테이블 엔트리의 일부를 저장하고 주소 변환이 필요할 때 이 정보를 사용합니다.
속도 향상:
TBL 캐시의 주요 목적은 가상 주소에서 물리 주소로의 변환 속도를 향상시키는 것입니다. 일반적으로 메모리 계층 구조에서 물리 메모리에 접근하는 것은 상대적으로 느리기 때문에 캐시를 사용하여 이러한 주소 변환을 가속화합니다.
동작 방식:
TBL 캐시는 주소 변환 요청이 들어올 때마다 가상 주소를 키로 사용하여 저장된 정보를 검색합니다. 캐시에 해당 정보가 있는 경우, 물리 주소로의 변환을 빠르게 수행할 수 있습니다. 그렇지 않으면 페이지 테이블을 조사하여 정보를 가져와야 합니다. 이러한 캐시 미스가 발생하면 속도가 저하됩니다.
캐시 정책:
TBL 캐시는 일반적으로 LRU(Least Recently Used), FIFO(First-In-First-Out) 등의 캐시 교체 정책을 사용하여 어떤 엔트리를 버릴지 결정합니다. 이를 통해 캐시의 효율성을 유지합니다.
TBL 캐시는 운영 체제와 하드웨어 사이의 인터페이스 역할을 하며, 가상 메모리 관리 시스템을 효과적으로 지원합니다. 이를 통해 프로세스 간의 격리, 메모리 보호, 가상 주소 공간 확장 및 물리 메모리 관리 등의 기능을 구현할 수 있습니다. 이러한 기술은 다중 프로세스 및 가상화 환경에서 매우 중요하며, 빠른 주소 변환은 시스템의 성능 향상에 기여합니다.
computer science 초기엔 프로세스에 physical address를 줬지만 프로세스가 RAM을 전부 쓰지 않는데 일단 할당해가는 상황이 발생했다. → 비효율적 상황
어떤 어플리케이션이 가상주소를 실제로 사용할 때, 실제 주소를 주겠다 → demand page
코어에서 실행중인 app이 멈춤 → 아직 할당되지 않은 주소를 참조하려고 함 → page fault handler 동작, 커널로 권한이 넘어간 후 allocate page → physical memory manager가 free page list에서 page를 얻어오고 0으로 초기화(anonymous page의 경우) → page fault handler 가 page table에 page를 mapping → app 다시 실행
0으로 초기화 하는 이유: process간 protection을 위해서
0으로 초기화 하지 않는다면 다른 process에서 사용한 값을 읽어올 수 있는 경우가 생긴다.
two types of memory (file-backed or anonymous)
anonymous 메모리는 page fault 가 발생했을 때 0으로 초기화
file-backed 메모리는 page fault 가 발생했을 때 fd가 가리키는 disk의 파일로부터 파일을 가져옴
I/O 가 너무 오래 걸리는데 CPU가 이를 기다리면 비효율 적인 경우
디스크에서 메모리에 직접 쓰는 방법(DMA)
다 썼음을 CPU에 알려주는 법(interrupt)
어떤 공간과 공간을 연결하는 mapping function을 만드는 것
cf) 포인터: 주소 → 값, virtual memory page table
storage도 적용할 수 있다.
file: a logical unit of storage 디스크의 일정 공간의 추상화
virtual address (location of data)와 physical address(disk)에서는
offset ————————————-- file block 이 둘은 indexing으로 연결된다.
offset은 뭘까?
indexing은 메모리와는 다르게 연결이 소프트웨어 기반으로 행해지는데 이는 디스크의 속도가 훨씬 느리기 때문에 굳이 하드웨어를 쓰지 않아도 괜찮기 때문이다. 그러나 요즘은 SSD의 발달로 디스크에서 파일을 읽어오는 속도가 매우 빨라졌기 때문에 OS 개발에 이를 지원하기 위한 방법을 바꾸어야 하는지에 대해 논의가 진행되고 있다고 한다.
그리고 disk는 데이터가 전원을 꺼도 남으니까 crash consistency를 신경써야 한다.
이러한 역할을 하는 software를 file system이라고 부른다.
How to map file to storage media?
• Divide a file to small chucks (called block)
• Create mappings from each block to a storage location (called block address)
abstraction 은 여러 분야에서 사용할 수 있는 개념이기 때문
cf) 웹서버