컴퓨터의 내부는 네트워크 카드, cpu, 메모리, 하드디스크, 메인보드…
디바이스들은 i/o 버스로 연결되어 있다. (isa, pci, eisa, scsi…) 이거 씨피유랑 vga, 이더넷, 사운드 등등 이런걸 연결한다는거
그리고 접속 방식도 다양하다!!
i/o 디바이스 내부를 보면 controller, logic, register set, bus interface로 구성되어있다.
그래서 cpu가 하드웨어 디바이스에 어떤 값을 주면 하드웨어는 그 로직을 보고 동작한다. 새 디바이스 꽂으면? 인식후에 필요한 드라이버를 설치한다,, 인식해줘야되니까
디바이스 제어
어떻게 cpu가 디바이스를 제어할까… cpu는 버스를 통해서 register address를 보낸다. 이 주소 공간은 각 디바이스에 할당 되어있는거고 디바이스는 버스를 통해서 데이터를 읽고 쓴다.
I/O디바이스
char device: 버퍼 캐쉬를 사용하지않음, 자료의 순차성.., 터미널.키보드 사운드 카드.프린터 등등잉 있다
block device: 블록 단위의 입출력치 가능한 장치를 뜻한다. 버퍼 캐쉬에 의해서 내부 장치를 표현한다.. 효율성이 중요하니.., 파일 시스템에 의해 마은트 되어서 관리되고 예시로는 하드디스크같은게 있다.
network device: 네트워크 스택이랑 하드웨어 사이에 위치해 데이터 송수시늘 담당한다. 이더넷. 네트워크 인터페이스 카드등이 속한다.
디바이스 드라이버란?
다른 프로그램이랑 하드웨어를 연결하는거.. 그래서 아까 새거 꽂으면 깔아야된다한거
os에서 하드웨어를 사용하게 해주는 모듈이다.
사용자가 사용가능한 operations를 구현한다. 오픈 클로즈 리드 라이트 같은거..
디바이스 파일
디바이스 파일의 속성
type: block or character
major number: specifies device driver
minor number: argument to device driver, kernel don’t care
/dev
character device driver
응용프로그램의 관점에서 디바이스 파일은 레귤러 파일이다
금데 파일 시스템의 관점에서는..
regular file: 디스크 드라이버에다 쓰거나 거기서 읽어오기
device fiile: 디바이스 드라이버 호출허는 작업(열기 읽기 쓰기 닫기 이런거)
blovk device driver
charater device driver랑 머가 다를까.. 실제 정보 전달하는 단위가 얘는 블록이다.
charater기반해서 read/write를 구현하려면 커널은 block conscious read/writefunction을 제공해 character i/o에서 블록 i/o로 변환한다. 그리고 디바이스 드라이버는 핸들 블록 리퀘스트 구현함
리눅스의 파일 시스템 구현
리눅스는 계층화해서 구현함
파일 I/O가 사용자 공간에서 시작해 저장 장치로 전달되는 과정이 강의자료 사진..
파일 작업 요청은 먼저 VFS(가상 파일 시스템)를 통해 파일 시스템 유형(ext4, VFAT 등)과 연결
이후 버퍼 캐시(Page Cache)에서 데이터를 임시 저장해 I/O 성능을 높이고, I/O 스케줄러가 요청을 최적화
최적화된 요청은 블록 드라이버를 통해 디스크나 플래시 메모리 같은 실제 저장 매체로 전달
하드 디스크 장치
구조는 전시간에 배운듯?? 아닌가
아무튼 입출력 과정은
1. 탐색(Seek): 디스크 헤드가 데이터를 읽거나 쓰기 위해 목표 실린더로 이동
2. 회전 지연: 디스크가 회전하여 목표 섹터가 디스크 헤드 아래에 도달할 때까지 대기
3. 내부 전송: 디스크 헤드가 데이터 읽기/쓰기 작업을 수행하고, I/O 회로를 통해 디스크 캐시에 데이터를 전달
4. 외부 전송: 디스크 캐시의 데이터가 호스트 인터페이스를 통해 I/O 버스를 통해 메모리로 전송
디스크 큐와 디스크 스캐쥴링
디스크 스케줄링의 목표는 디스크 입출력의 처리율을 향상하고 응답시간을 줄이는 것이다
도착하는 디스크 입출력 요청은 큐에 저장되는데 이걸 디스크 큐라고 함
디스크 스케쥴링은 큐에 저장된 입출력 요청들의 목표 실린더 위치를 고려해서 디스크 암이 움직이는 평균 탐색 거리를 최소화한다. 일케해서 탐색 시간이라 접근시간을 줄이면 처리율이 올라간다
선입선처리(FCFS)
요청이 들어온 순서대로 처리, 간단하지만 탐색 시간 최적화에 별로임
최소 탐색시간 우선(SSTF, Shortest Seek Time First)
디스크 헤드와 가장 가까운 요청을 우선 처리, 탐색 시간이 최소화, 근데 멀리 있는 요청은 무시될 가능성(기아 문제 가능…
스캔(SCAN)
디스크 헤드가 한 방향으로 이동하며 요청을 처리하고 끝에 도달하면 반대 방향으로 이동
근데 일케하면 반대편으로 가야하잖아,,, 그래서
순환 스캔(C-SCAN, Circular SCAN).. 순환해..
스캔이랑 유사하지만 한 방향으로만 요청을 처리하고 끝에 도달하면 처음으로 약간 원통기둥 도는거마냥 뱅글뱅글…모든 요청이 공평하게 처리할 수 있음
룩(LOOK)
스캔이랑 비슷한데 요청이 있는 마지막 위치까지만 이동하고 방향을 바꿈. 좀더 낫겟지 스캔보다.. 불필요한 이동 없으니까
RAID
저장 장치가 고장나면 문제가 생긴다. 그럼 어케? 두개의 동일한 디스크를 쓰거나(디스크 미러링) 값싼 디스크를 병렬로 연결하는 거다(raid)
디스크 미러링은 RAID 레벨 1로도 불림.
RAID 0은 데이터를 논리적 디스크 배열 히나에 일정힌 크기로 나눠 분산 저장한다, 떨어져서 저장하니까 스트라이핑이라거함. 먼가 줄무늬 같으니까… 대기중인 입출력 요구를 병렬적으로 처리해서 전송율이 높은데 깨졌을 때ㅜ복구는 안된다. 데이터 중복 기록을 안하니까..
RAID 1은 0처럼 스트라이핑 쓰면서 배열 내의 모든 디스크에 동일한 데이터 있는 미러 디스크가 있음. 얘는 중복 저장된 데이터가 적어도 두개 있는 드라이브로 구성됨. 읽을 땨는 두개중에 아무거나 들고오니까 성능 좋아진다 쓸때는 단일 디스크 드라이브랑 같음.
RAID 5는 4랑 비슷하다고함 근데 4는 패리티 하나에 와라랅 있었는대 5는 모든 드라이브에 패리티를 나누었다고 한다. 그래서 디스크의 병목현상이 없다!! 작고 잦은 데이터 기록에 유리하고 기록과 읽기가 동시에 가능하다(입출력 빈번한 업무에 굳)
그렇다면.. 레이드랑 백업이랑 뭐가 다를까 결국에는 데이터 잃을까봐 또 저장한다는거같은데..
백업은 어떤 시점에서 그 상황을 캡쳐하는거고
RAID는 애초에 저장할때부터 두개를 하는거라 차이가 있다..
SSD 저장장치
ssd는 플래시 메모리를 저장소로 하는 비휘발성 기억 장치..
메모리 계층 구조의 최하위 단에 위치한 보조 기억 장치이다
모터나 헤드같은 기계부품 없이 순수 반도체고 디스크보다 비싼대힌신 입출력 속도는 빠르다
읽고 쓸 데이터는 dram cache에 임시저장된다
논리블록 주소를 물리 블록 주소로 변환하고 블록 입출력, 호스트와의 입출려그 가비지 컬랙션 등등은 ssd제어기에서 하게되는데 이게 ssd에서 젤 중요한 부분임
ssd는 여러 블록으로 구성되고 블록은 또 페이지들로 구성된다. 페이지는 읽고 쓰는 단위인데 이거ㅓ 접근 시간은 동일하다. 주소변환은 테이블에서…
ssd의 플래시 변환 계층
하드디스크를 기반으로 하는 운영체제의 파일 시스템은 디스크를 섹터 단위로 인식한다. 섹터를 기반으로 하는 기존 파일 시스템은 ssd 읽고 쓰기가 안되니까 플래시 변환 걔층으로 이 문재를 해결한다.. 그게뭐람.. 뭐냐면 ssd내부의 물라적인 특성을 운영체제로부터 숨기는거다 이건 ssd 제어기 내부에 구현됨
ssd 입출력 동작
페이지를 읽고 블록을 지움
페이지 쓰기를 프로그램이라 부름. 페이지 쓰기는 페이지 단위로 이루어지고 빈페이지에만 쓸 수 있다.
처음 페이지에 쓰는 경우에는 ssd가 빈 페이지 찾아서 리고하고 리고된 페이지를 수정할 때는 ssd 제어기의 메모리로 페이지를 읽고 거기서 페이지 수정하고 빈 페이지 찾아서 수정된 페이지를 기록한다.그러고 나서 이전 페이지를 dirty나 stale로 표시해둠. 이렇게 페이지 수정시에 현재 페이지 안지우고 다른 빈페이지에 왜 쓸까.. 플래시 메모리의블록은 쓰기 및 지우기 반보갛면 수명이 단축됨ㅁ... 여러 페이지로 쓰기 분산 시키는게 더 좋음
지울때는 블록 단위로 지운다. 왤까.. 지울때 높은 전앞이 걸리면 주변 페이지 훼손이 될 수 있으니까 블록 단위로 지우게 된다. 운영체제는 SSD에 읽기쓰기만 가능하고 지우기는 SSD내부에서 가비지 컬렉션 수행할 때 빈 블록 만드려고 SSD내부에서 하는거임
가비지 컬렉션은 뭐냐면 블록 내에 빈 페이지 없으면 아까 dirty라고 써둔 페이지 제거해서 빈 블록 만드는거
웨어 레벨링과 SSD의 용도
플래시 메모리의 수명에 관한 특징: 플래시의 블록은 쓰기나 지ㅜ기 횟수에 비례해 닳는다
웨어레벨링.. 균등 쓰기 분배라고 하는데 플래시 메모리의 모든 블록에 걸쳐 쓰기를 균등하게 분배하는거다. 이렇게 하면 과도하게 쓰는거 막아서 덜 닳게 됨. 즉 플래시 메모리의 고장이나 데이터 ㅅ손실을 예방할 수 있다! SSD 제어기에서 함 이것도
SSD의 용도
읽기가 많은 웅영체제 코드나 프로그램 설치에 적합
백업 저장 장치에는 부적합(NAND 플래시메모리는 전원 공급 없이 시간 지나면 전하 누출되어 데이터 지워지니까)
쓰기나 수정 작업이 많은 스왑 영역이나 많은 파일이 임시로 생성되었다가 지워지는 임시 파일 시스템에 적합하지 않다.
'공부해요 > 운영체제' 카테고리의 다른 글
I/O 하드웨어 퀴즈 (0) | 2024.12.05 |
---|---|
파일 시스템 관리 퀴즈 (2) | 2024.11.28 |
파일 시스템 관리 (1) | 2024.11.28 |
가상메모리 퀴즈 (0) | 2024.11.14 |
가상메모리 (1) | 2024.11.14 |