반응형

디스크와 메인 메모리(사이 버퍼)

프로그램이 하나의 Logical Record를 요청할 때

 

디스크에 있는 Physical Record인 한 block이 

메인 메모리의 버퍼에 저장되고, 

프로세스는 버퍼에 저장된 데이터를 Work Area로 불러와 해당 데이터를 이용해서 프로세스를 실행한다.

 

이때 버퍼의 자료구조는 Circular Linked List를 이용하여

다중 버퍼로 구현될 수 있다. 

 

프로그램 코드에서 open으로 파일을 불러올 때 

디스크에서 해당하는 파일의 첫번째 블록을 메인 메모리의 input 버퍼에 저장한다.

 

이때 첫번째 블록을 버퍼로 로드하는 이유는 미리 블록을 로드해두면

이후에 만약 첫번째 블록에 해당하는 데이터를 이용해야하는 일이 있으면

디스크에 Access할 필요 없이 바로 다음 명령을 진행할 수 있어서 효율적이다. 

물론 첫번째 블록에 해당하는 데이터를 이용하지 않는 경우도 있다.

 

 

버퍼

만약 A라는 프로세스가 x,y,z라는 파일을 open으로 읽는다면

IO Buffer역할을 하는 메모리가 메인 메모리에 할당된다.

그리고 후에 close를 하면 할당했던 메모리를 반환하여 다른 프로그램이 메모리를 활용할 수 있도록 한다.

그리고 프로그램을 종료할 때 꼭 close를 해야 메인 메모리에 있는 Output Buffer에 있는 데이터가

디스크에 올바르게 저장된 후 프로세스가 종료된다.

 

버퍼안의 여러개의 블록을 저장할수록

디스크 Access가 줄어들어 Io의 속도가 빨라지지만 메인메모리의 용량은 한정되어있어

만약 버퍼가 과도하게 메모리를 차지하게 되면 다른 프로세스가 사용할 수 있는 메모리의 양이 줄어들어

전체적인 프로세스 스케줄링이 비효율적으로 된다.

 

 

 

 

+ Recent posts