프로세스를 많이 사용할 수 록 시스템이 무거워짐.
1. 새 프로세스 생성하는 시간이 오래걸림
2. 큰 컨텍스트 스위칭 오버헤드
3. 동기화 오버헤드
실행단위 : cpu의 실행 기본단위로 스레드
스레드는 자신만의 스레드 컨텍스트,thread id, program counter, register set, stack을 갖음
디스크 설명 : https://beforb.tistory.com/5
def : 디스크, ssd 등 전원이 꺼지더라도 지속적으로 데이터 저장 가능한 시스템
플래터, 암, 스핀들,
스핀들 기준으로 플래터가 속도하는 속도 = rpm(5400,7200,10000 등
단위 :
sector, 동일 반경상의 sector 묶음 = 트랙
플래터는 여러장 존재하므로 이 동일 반경 내의 트랙의 묶음을 실린더(cylinder)라고함
암(arm)의 끝부분에 작은 침으로 데이터 읽어옴
데이터는 반경 큰쪽에서 작은 쪽으로 작아지면서 저장됨 A트랙에 데이터 전부 저장됐으면 동일 트랙의 뒷면에 저장됨
플래터가 두개 이상일 경우 에는 먼저 해당 실린더 부분을 다 채우게 됨
= positioning time + transfer time
포지셔닝 타임
seek time + rotational time
read sector n 명령 수행 하기 위해서 arm을 해당하는 섹터에 위치시키는 시간
트랙간의 이동시간 = seek time
트랙이 회전하여 바늘 밑으로 해당 섹터가 위치하기까지 시간 = rotational time
seek > rotational time
트랜스퍼 타임
읽은 섹터값을 메모리(dram)으로 이동하는 시간, 포지셔닝 타임에 비해 굉장히 짧은 편
cpu 또는 메인보드에 존재할 수 있음 (기본적으로 메인보드)
역할 : cpu와 디스크 사이에서 통신을 도와주는 역할
if cpu가 디스크 내 특정 섹터 읽기를 요청, DC에 요청하게 됨. disk는 읽은거 DC한테 주고 DC가 cpu한테 전달함
cpu는 메모리의 섹터에 직접 접근이 불가능
=> 일반적으로 섹터의 크기 512byte, cpu 내 해당 크기만큼의 메모리 공간 없고 cpu는 명령어 수행을 위한 최소한의 레지스터만 존재함.
HDD내부에
디스크(플래터 등) 과 disk ram이 존재함,
HDD
DVD_ROM 바깥 트랙이 저장용량 더 큼, 면적이 넓으니까
app에서 disk에 접근하려면 read or write 등의 시스템콜 사용해야함
system call 호출 -> file system -> buffer cache -> disk driver -> disk 접근
disk driver에서 disk 참조하려는 호출들을 queue 형태로 관리
이 때 현재 작업이 완료되면 queue 내부에서 다음 처리를 어떻게 결정하냐에 따라 average disk access time이 결정됨 => disk scheduling이 관리함
access time은 seek과 rotation 타임이 영향을 끼침, 크게 영향을 주는 것은 seek이므로 가능한 seek을 줄이고자 한다.
first come first service (fcfs, fifo)
queue에 먼저 들어온 순서대로 작업 처리
shortest seek time first
seek 타임이 가장 짧은 요청을 찾아서 우선적으로 서비스함
starvation의 문제가 발생 , 즉 어떤 서비스는 실행되지 못함(우선순위에 밀려서)
SCAN(실제 사용됨, 엘리베이터 alg라고도 함)
헤드는 계속 한쪽 방향으로 이동함
이동 중에 실린더 번호에 해당하는 리퀘스트가 있으면 서비스(실행)
끝에 이르면 다시 반대방향으로 계속이동
CSCAN
한쪽 방향으로 이동하다가 끝에 도달하면 반대방향으로 이동하지 않고 반대방향의 시작점에서
동일한 방향으로 이동함
Look and C-Look(실제 사용)
<clook
scan을 디스크에 구현할 떈 look, cscan은 clook으로 구현함
요청 중 가장 큰 값, 작은 값들으 끝점으로 하고 이동함.
<look
비슷하게 이동함
디스크 내의 플래터, 디스크 캐시 등이 존재. 만약 요청들어온 데이터가 캐시에 존재할 경우 플래터로 내려가서 찾지 않고 캐시의 해당 데이터값을 메모리에 바로올림
write의 경우 메모리에서 cache에 저장 후 리턴함 , 계속 이렇게 가다가 중간에 파워 나가면 캐시 내의 데이터가 다 날아감. 따라서 디스크는 내부적으로 캐시를 주기적으로 변경된 섹터를 저장함(싱크)