전체 글 1383

59_커널 입/출력 서브시스템 (Kernel I/O Subsystem)

59_커널 입/출력 서브시스템 (Kernel I/O Subsystem) 커널은 입/출력과 관련된 많은 서비스를 제공한다. 입/출력 스케줄링, 버퍼링, 캐싱, 스풀링, 장치 예약 및 에러 처리등의 서비스가 제공되며 이들은 하드웨어와 장치 드라이버 구조를 바탕으로 한다. [입출력 스케줄링 (I/O Scheduling)] 입/출력 요청을 스케줄 한다는 것은 그 요청들을 실행할 순서를 결정하는 것을 의미 한다. 응용프로그램이 입/출력을 요청하는 순서대로 처리하는 것은 비효율 적이다. 운영체제 개발자들은 각 장치마다 대기 큐를 유지함으로써 스케줄링을 구현하고 있다. 응용프로그램이 봉쇄형 입/출력 시스템을 호출 하면 그 입/출력 요청은 해당 장치의 큐에 넣어진다. 입/출력 스케줄러는 시스템의 성능과 각 응용에 대한..

58_응용 입/출력 인터페이스 (Application I/O Interface)

58_응용 입/출력 인터페이스 (Application I/O Interface) 입/출력 장치들이 일관된 방법으로 다루어 질 수 있도록 운영체제가 인터페이스를 구성하는 기술을 설명 한다. 공통적인 특징을 가진 입/출력 장치들의 표준 함수를 인터페이스(interface)라 한다. 장치 드라이버(device driver)라 불리는 커널 내의 모듈들은 각 입/출력 장치를 위한 구체적인 코딩을 제공하여 바로 위에서 정의한 "인터페이스"의 표준 함수들을 내부적으로 수행한다. 장치 드라이버(device driver) 계층의 목적은 여러 입/출력 하드웨어 차이를 숨기고 이들을 간단한 표준 인터페이스들로 보이도록 포장시켜서 이것을 상위의 커널 입/출력 서브시스템에 제공하는 것이다. 이렇게 되면 입/출력 서브시스템은 하..

57_폴링(Polling), 인터럽트(Interrupt), DMA(Direct Memory Access)

57_폴링(Polling), 인터럽트(Interrupt), DMA(Direct Memory Access) [폴링(Polling)] 호스트와 입/출력 하드웨어 사이의 프로토콜은 복잡하지만 기본적인 핸드셰이킹(hand shaking) 개념은 간단하다. 제어기는 상태 레지스터의 busy 비트를 통해 자신의 상태를 나타낸다. 제어기는 바쁠 때는 busy 비트를 1로 설정하고 다음 명령을 받아들일 준비가 되어 있을 경우에는 busy 비트가 0으로 변경한다. 호스트는 다음과 같은 방법으로 핸드셰이킹을 통해 제어기와 협력하면서 포트를 통해 출력을 쓴다. 호스트가 반복적으로 (소거될 때까지) busy 비트를 검사한다. 호스트가 명령 레지스터에 쓰기 비트(write bit)를 설정하고 출력(data out)레지스터에 출..

56_입/출력 시스템 (I/O System)

56_입/출력 시스템 (I/O System) 컴퓨터에서 주로 하는 작업이 연산작업과 I/O 작업 이다. 간단한 웹서핑 등의 작업은 연산보다는 I/O 작업이 더 많이 발생하기도 한다. 이처럼 다양한 입출력 장치들은 각각의 특성을 보이기 때문에 각각의 특성에 맞는 제어가 필요하다. 이처럼 다양한 제어 방법들이 커널의 입/출력 서브시스템(I/O Subsystem)을 형성하며 이들은 커널의 다른 부분이 입/출력 장치를 관리하는 복잡한 일에 신경을 쓰지 않게 해준다. 장치 드라이버는 모든 하드웨어를 일관된 인터페이스로 표현해 주며 이러한 인터페이스를 그보다 상위층인 커널의 입/출력 서브시스템에게 제공해 준다. 이는 시스템 호출이 응용과 운영체제간에 표준적인 인터페이스를 제공하는 것과 유사하다. 하드웨어 장치는 케..

55_디스크 스왑 공간 관리(Disk Swap Space Management)

55_디스크 스왑 공간 관리(Disk Swap Space Management) 스와핑은 프로세스 전체를 디스크나 메인 메모리로 옮기는 작업으로 사용 가능한 물리 메모리가 매우 작을 때 활성화 되며 사용 가능 메모리를 만들기 위해 프로세스들은 메모리에서 스왑 공간으로 이동 된다. 대부분의 현재 운영체제들은 이러한 방식이 아닌 스와핑과 가상 메모리 기법을 이용하여 페이지를 스왑한다. 스왑 공간 관리는 운영체제가 수행하는 저수준 작업으로 가상 메모리는 디스크를 주 메모리의 스왑 공간으로 사용한다. 디스크는 메모리보다 느리므로 스왑 공간의 설계는 매우 중요하다. [스왑 공간 사용 (Swap Space Use)] 사용하는 메모리 관리 알고리즘에 따라 스왑 공간은 운영체제마다 다양한 방법들로 운영된다. 스왑 공간은..

54_디스크 관리(Disk Management)

54_디스크 관리(Disk Management) 운영체제는 디스크 관리 기능 일부를 담당한다. 포맷을 통한 섹터의 관리, 컴퓨터 시작을 위한 부트 블록 관리, 디스크의 손상된 블록 등을 관리 한다. [디스크 포맷(Disk Format)] 디스크는 자료를 저장하기 전에 섹터들로 나누어져 있어야 한다. 이 과정을 저수준 포맷팅(low level formatting) 또는 물리적 포맷팅 이라 한다. 저수준 포맷팅은 섹터를 구분하기 위해 디스크를 적절한 자료구조로 채우는 것이며 자료 구조는 보통 헤더, 자료 영역(보통 512 바이트), 트레일러로 구분 된다. 헤더와 트레일러는 수정 코드(ECC, Error Correcting Code)와 같은 정보를 가지고 있다. 디스크 제어기가 섹터에 자료를 쓸 때 자료 값으..

53_디스크 스케줄링(Disk Scheduling)

53_디스크 스케줄링(Disk Scheduling) 운영체제의 역할 중 하나는 효율적인 하드웨어 사용이다. 디스크 드라이브의 경우에는 빠른 접근 시간과 높은 전송량을 제공해야 함을 의미한다. 디스크 접근시간은 두 가지 요소로 이루어지는데 탐색시간(seek time, 디스크 암이 헤드를 해당 실린더로 움직이는데 걸린 시간)과 회전 지연(rotational latency, 디스크 헤드가 원하는 섹터 위치로 도달하기까지 회전에 소요되는 추가적인 시간)시간 이다. 디스크 대역폭(bandwidth)은 단위 시간 당 전송되는 총 바이트 수이다. 효율적인 스케줄링은 접근 시간과 대역폭을 모두 향상 시킬 수 있다. 프로세스가 입/출력을 필요로 할 때마다 운영체제에 시스템 호출(system call)을 한다. 이 호출에..

52_네트워크 파일 시스템 (Netwrok File System)

52_네트워크 파일 시스템 (Netwrok File System) NFS는 LAN을 거쳐 원격 파일을 접근하기 위한 소프트웨어 시스템의 구현과 명세 모두를 말한다. 통신은 TCP 또는 UDP 두 가지 중 하나를 사용한다. NFS의 목적은 이들 파일 시스템들 사이에서 일정 수준의 공유를 투명하게 허용하는 것이다. 공유는 클라이언트 서버의 관계를 기반으로 하며 시스템은 동시에 클라이언트와 서버가 될 수 있다. [원격 디렉토리 접근] 원격 디렉토리가 특정 시스템(M1)으로부터 투명하게 접근 가능하도록 하기 위해서 M1의 클라이언트는 먼저 마운트 명령을 실행 한다. 마운트 명령은 원격 디렉토리가 지역 파일 시스템의 디렉토리 상에 장착 되게 한다. 마운트 명령이 완료되면 장착된 디렉토리는 지역 파일 시스템의 서브..

51_로그 구조 파일 시스템 (Log Structure File System)

51_로그 구조 파일 시스템 (Log Structure File System) 디스크 상의 디렉토리 구조, 자유 블록 포인터, 자유 FCB 포인터와 같은 파일 시스템 자료 구조는 시스템 고장 발생 시 일관성이 없어 질 수 있다. 운영체제가 로그 기반 기술을 사용하기 전에는 보통 이들에 대한 변경들은 이들 구조에 직접 적용 되었다. 파일 생성과 같은 대표적인 연산은 디스크 상의 파일 시스템 내부의 많은 구조적 변화를 포함한다. 이러한 변경은 고장에 의해 방해 받을 수 있고 이들 구조가 일관성이 없어지는 결과를 초래한다. 시스템 구조가 깨어질 수 있게 허용하고 복구 시 수리하도록 하는 접근 방법에는 여러 문제가 존재 한다. 그 중 한가지는 비일관성을 회복할 수 없을 수도 있다는 것이다. 일관성 검사가 구조를..

50_디스크 자유 공간 관리(Free-Space Management)

50_디스크 자유 공간 관리(Free-Space Management) 디스크의 공간은 제한되어 있기 때문에 삭제된 파일들일 차지하던 공간을 새로운 파일들을 위하여 다시 재사용하여야 한다. 시스템은 이러한 자유 공간을 리스트로 유지하고 관리한다. 디스크는 자유 공간 리스트에 디스크의 모든 자유 블록들을 등록 한다. 새로운 파일을 만들려면 자유 공간 리스트를 탐색하여 새로운 파일을 위한 공간을 할당 받아야 한다. 할당 된 공간은 자유 리스트로부터 삭제 된다. 자유 공간 관리를 위해서 꼭 리스트 형태로만 구현될 필요는 없다. 관리를 위해 사용되는 다양한 방법을 알아 보자. [비트 벡터(Bit Vector)] 자유 공간 리스트는 흔히 비트 맵(bit map) 또는 비트 벡터(bit vector)로써 구현 된다...