Advanced Frames and Page Protections


Can frames be shared between processes? Can they be specialized?

  프로세스간 프레임들은 공유될 수 있습니다. 페이지 테이블은 프레임 번호를 저장하는 것 외에 어떤 프로세스가 특정한 프레임을 읽거나 쓰는지를 저장하는 데 사용될 수도 있습니다. 읽기 전용 프레임들은 여러개의 프로세스들 사이에서 안전하게 공유될 수 있습니다. 예를 들면, C library instruction code는 모든 프로세스들 사이에서 공유되어 프로세스 메모리에 동적으로 load됩니다. 각각의 프로세스는 그 메모리를 읽을 수 있습니다. 즉, 메모리의 읽기 전용 페이지에 쓰려고 시도한다면 SEGFAULT를 받을 것입니다. 때때로 메모리 접근이 segfalut를 일으키거나 일으키지 않는 것은 하드웨어가 접근을 할 수 있는지 알려주는 것에 달렸습니다.
  추가로, 프로세스는 mmap 시스템 콜을 사용해 child process와 페이지를 공유할 수 있습니다. mmap은 각각의 가상 주소를 하나의 physical frame으로 연결하는 대신 다른 무언가와 연결합니다. 무언가는 파일이 될 수도 있고, GPU unit이 될 수도 있고, 또는 생각할 수 있는 다른 매핑된 오퍼레이션일 수 있습니다. 메모리 주소에 쓰는 것은 디바이스를 통해 써지거나 OS에 의해 쓰기가 중단될 수 있지만, 때때로 OS가 최적화를 수행할 수 있으므로 강력한 추상화입니다(?). (여러개의 프로세스 메모리가 같은 파일에 매핑되는 것은 커널에서 하나의 매핑만 생성합니다)

What else is stored in the page table and why?

전에 이야기한 읽기 전용 비트와 사용 통계 이외에 적어도 읽기 전용, 수정, 실행 정보를 저장하고 있는 것이 일반적입니다.

What's a page fault?

실행중인 프로그램이 physical memory에 매핑되지 않은 가상 메모리에 접근하 때 페이지 폴트가 발생합니다. 페이지 폴트는 다른 상황에서도 발생할 수 있습니다.
3 종류의 페이지 폴트가 존재합니다.

Minor : 페이지에 아직 매핑이 되어 있지 않지만, 유효한 주소인 경우입니다. sbrk(2)에 의해 메모리가 요청되었지만 아직 쓰여지지 않아 OS가 할당하기 전에 처음으로 쓰여지는 것을 기다리는 경우가 이 예에 해당될 수 있습니다. OS는 단순히 페이지를 생성하고, 메모리에 로드하여 옮깁니다.

Major : 페이지에 매핑하는 것이 메모리에 존재하지 않고 디스크에 존재하는 경우 발생합니다. 이 경우 일어나는 일은 메모리의 페이지를 다른 페이지로 교체하는 것입니다. 

Invalid : 쓸 수 없는 메모리 주소에 쓰려고 시도하거나 읽을 수 없는 메모리 주소를 읽으려고 시도할 때 발생합니다. MMU가 invalid fault를 생성하면  OS는 쓸 수 있는 세그먼트를 벗어사 쓰려고 했다는 SIGSEGV signal을 생성합니다.


 Read-only bit

읽기 전용 비트는 페이지를 읽기 전용으로 표시합니다. 이 페이지에 쓰기를 시도한다면 페이지 폴트가 발생합니다. 이 페이지 폴트는 커널에 의해 처리됩니다. 이러한 상황의 두 가지 예로는 여러개의 프로세스가 C runtime library를 공유하는 것과(보안적인 목적으로 프로세스가 라이브러리를 수정하는 것을 원하지 않을 것입니다), Copy-on-write할 때 페이지를 복제 비용이 첫 번째 쓰기가 발생하기 전까지 지연되는 것이 있습니다.

  Dirty bit

dirty bit은 성능 최적화를 위해 사용됩니다. 디스크의 페이지는 physical memory에서 읽어와 쓰기가 일어나지 않았다면 디스크로 되돌아가 필요가 없지만, 페이지가 들어와 쓰기가 일어났다면 dirty bit이 set되어 디스크에 다시 저장해야한다고 알려주어야 합니다. 이 전략을 사용하려면 메모리에 page in 된 후에 복사복을 유지해야 합니다. dirty bit이 사용되지 않으면 baking store는 그 순간 page out된 크기만큼이 필요합니다. dirty bit이 사용되면, 일부 페이지는 physical memory와 backing store에 모두 저장됩니다.

  Execution bit

execution bit은 페이지의 바이트가 CPU instruction로 사용 되할 수 있는지로 정의됩니다. 페이지를 비활성화 함으로서 프로세스 메모리에 악의적으로 저장된 코드를 쉽게 실행하는 것을 방지할 수 있습니다.


Posted by 몰랑&봉봉
,