TIL - 2020.11.23 (월)

코드 굽는 제빵사·2020년 12월 2일
0

TIL

목록 보기
4/20
post-thumbnail

리눅스 커널 디자인의 기술을 읽으면서 책 내용 정리하기 (티스토리부터 이전 된 자료 입니다.)

파일 오퍼레이션

파일 시스템 설치로 하드디스크 파일 시스템을 루트 파일 시스템으로 만드는 작업이다. 이 작업을 마치면 OS는 루트 디바이스와 데이터를 주고 받을 수 있게 된다.

하드디스크는 파티션으로 나누어져 있다. 각 파티션은 각각 디바이스로 취급된다.

파일 열기

파일 열기는 open()함수를 사용한다.

OS는 유저 프로세스의 요청에 따라 파일에 액세스한다. 커널을 통하면 한 파일을 여러 번 오픈 하는것이나 많은 파일을 오픈하는 것을 제어 할 수 있다. 일단 파일이 오픈되면 파일의 포인터를 저장해 둔다.
OS에서 파일 테이블은 데이터 구조체로 모든 프로세스들이 오픈한 파일들을 관리한다. 이 구조체에서 관리하는 정보들을 다음과 같은 것들이다. 가각의 프로세들이 각각 다른 파일을 오픈 했다는 정보, 프로세스들이 같은 파일을 오픈한 정보, 그리고 한 프로세스가 다양한 파일들을 여러 번 오픈했는지에 대한 정보들이 파일 테이블에서 관리하는 정보들이다.

파일 읽기

파일을 읽는 다는 것은 유저 프로세스가 오픈한 파일에서 데이터를 읽어 들이는 것을 말한다.
파일 읽기는 read() 함수를 사용한다.

주변 장치의 데이터 블록 위치 파악하기

read()함수는 시스템 콜 sys_read()함수를 호출한다. 주요 동작이 실행되기 전에 시스템은 먼저 이 함수가 실행 될 수 있는지를 파악한다. 이때 유저 프로세스가 소유한 핸들이 있는지, 혹은 읽으려는 데이터의 크기가 허용된 범위 내인지 확인한다. 또 읽는 데이터를 저장한 유저 프로세스의 버퍼가 읽기 전용인지 알아본다. 이런 확인 작업을 거치고 나서야 읽기 작업을 시작한다.

데이터 블록을 버퍼 블록으로 읽어들이기

read()함수를 호출해서 파일의 첫 데이터 블록을 하드디스크에서 지정된 버퍼로 읽어 들인다.

버퍼의 데이터를 프로세스 메모리로 복사

버퍼로 데이터 블록을 로드하고 나서 시스템은 이 데이터를 다시 유저 프로세스의 데이터 메모리로 복사한다.
이것으로 파일을 읽는 과정은 끝났다.

버퍼에서 하드디스크로 데이터를 동기화시키는 두 가지 방법

첫번째는 쉘 프로세스가 처음 수행될 때, 업데이트 프로세스가 시작된다. 이 프로세스는 메모리에 상주하면서 실행된다. 업데이트 프로세스의 임무는 데이터를 버퍼에서 저장 장치로 데이터 동기화하는 것이다.
이 프로세스는 pause()함수를 실행시키게 되는데, 이 함수는 시스템 콜인 sys_pause()함수로 맵핑되어 있어 결과적으로 프로세스가 인터럽트 가능한 대기상태가 된다. OS는 업데이트 프로세스를 주기적으로 대기 상태에서 깨워서 sync()함수를 호출하게 하고 버퍼의 데이터를 저장 장치로 동기화시킨다.

0개의 댓글

관련 채용 정보