[운영체제] 26. File System Implementations 2

이건회·2022년 3월 27일
0

운영체제

목록 보기
25/27
post-thumbnail

  • 기존에는 파일을 오픈 후 시스템 콜을 해서 운영체제가 해당하는 파일이 버퍼 캐시에 있으면 전달하고 없으면 디스크 파일 시스템에서 읽어와 사용자 프로그램에 전달하는 구조다. 그럼 사용자 프로그램은 내용을 카피해서 전달한다. 혹은 메모리 맵 아이오 시스템 콜을 하면 자신의 주소공간 중 일부를 파일에 매핑한다. 버퍼 캐시에서 읽어온 내용을 페이지 캐시에 카피해 주면 사용자 프로그램이 페이지 캐시에 내용을 요청하는 형식이다. 만약 페이지에 요청한 내용이 페이지에 없으면 페이지 폴트가 나서 운영체제에 cpu가 넘어가 내용을 읽어와 페이지에 내용을 카피하는 흐름이다. 기존의 환경에서는 파일 입출력을 할 때는 버퍼 캐시를 통과해야 한다. 그러고 자신의 페이지 캐시에 카피하는 오버헤드가 있다.
  • 유니파이드 버퍼 캐시를 사용하는 경우 시스템 콜을 하는 경우 무조건 운영체제에 cpu가 넘어간다. 그럼 운영체제가 버퍼캐시에 올라온 내용을 다이렉트로 사용자 프로그램에 카피해 준다. 메모리에 없는 내용을 디스크의 파일 시스템에 읽어온다. 메모리 맵 i/o에서는 버퍼 캐시의 내용을 페이지 캐시에 카피하는 것이 아닌, 버퍼 캐시에 주소 공간을 다이렉트로 매핑한다. 즉 페이지 캐시와 버퍼 캐시가 같다.

  • 프로그램의 코드 부분은 메모리에 올라가고 쫓겨날때 스왑 에리어로 넘어가지 않고 프로세스의 주소 영역에 매핑되어 있다.

  • 프로그램이 실행 되다가 어떤 데이터 파일을 메모리 맵 i/o 형태로 쓰고 싶으면, 프로그램이 운영체제에게 데이터 파일의 일부를 프로그램의 주소공간 중 일부에 매핑을 해 달라고 요청 시스템 콜을 하고, 운영체제가 데이터 파일 중 일부(검은색)를 주소공간에 매핑 한다. 그러면 프로그램(버츄얼 메모리)이 실행 되면서 검은색 메모리위치에 접근 했을 때 그 내용이 없으면 페이지 폴트가 난다. 그러면 cpu가 운영체제에게 넘어가 그 페이지를 물리적 메모리에 올린다. 나중에 그 내용이 메모리에서 쫓겨나면, 메모리 맵 파일이기 때문에 스왑 에리어로 가는 것이 아닌 데이터파일(검은색 점)에 수정된 내용을 써주고 나간다.
  • 프로세스 a가 똑같은 파일을 요청하면 운영체제에게 시스템 콜을 해 운영체제가 자신의 버퍼캐시에 그 내용을 읽어 오고 그 내용을 카피해 a에 전달한다.
  • 메모리 맵 i/o는 내용을 물리적 메모리에서 한번 복사 없이 그대로 읽어오는 점에서 오버헤드가 없지만, 다른 프로세스가 내용을 수정하면 내용의 일관성이 무너질 수 있다는 단점이 있다.
profile
하마드

0개의 댓글