운체_w4

네코·2022년 4월 14일
0

운영체제

목록 보기
3/6

Thread

프로세스를 많이 사용할 수 록 시스템이 무거워짐.
1. 새 프로세스 생성하는 시간이 오래걸림
2. 큰 컨텍스트 스위칭 오버헤드
3. 동기화 오버헤드

실행단위 : cpu의 실행 기본단위로 스레드
스레드는 자신만의 스레드 컨텍스트,thread id, program counter, register set, stack을 갖음

  • 스레드와 프로세스 콜의 차이점
    stack per thread
    스레드는 concurrent한 함수 실행
  • 스레드 장점
    low context switching overhead
    small memory 차지 ( stack+TCB만 있으면 가능)
    동기화 부하 작음
    스레드 생성 시간 작음
  • 프로세스와 스레드의 관계
    process = set of threads and collection of resources
    프로세스는 스레드에게 실행할 수 있는 환경을 제공하는 것.
    실행되는 것은 스레드가 실행되는 것이지만 실행 시 필요한 자원을 관리하는게 프로세스
  • 스레드 library
    2가지 종류
    user level : 데이터, 코드 등이 모두 유저 레벨에서 돌아가고 시스템 콜 사용 없음
    자신만의
    kernel level : 시스템 콜의 도움을 받아 스레드 제어함, 모두 커널 레벨 존재(POSIX PThread or Java thread등)

멀티 스레딩 모델

  • many to one model
    커널의 한 스레드에 유저 단의 여러 스레드를 올리는 것
    유저 단의 실행 중인 스레드가 read 같은 이유로 sleeping 하면 kernel 단의 스레드가 waiting queue로 들어가서 유저 단으 ㅣ나머지 스레드들이 강제적으로 waiting됨
  • one to one
    맵핑 개념.
  • many to many

Thread cancellation

Storage

디스크 설명 : https://beforb.tistory.com/5

def : 디스크, ssd 등 전원이 꺼지더라도 지속적으로 데이터 저장 가능한 시스템

플래터, 암, 스핀들,
스핀들 기준으로 플래터가 속도하는 속도 = rpm(5400,7200,10000 등
단위 :
sector, 동일 반경상의 sector 묶음 = 트랙
플래터는 여러장 존재하므로 이 동일 반경 내의 트랙의 묶음을 실린더(cylinder)라고함

암(arm)의 끝부분에 작은 침으로 데이터 읽어옴

데이터는 반경 큰쪽에서 작은 쪽으로 작아지면서 저장됨 A트랙에 데이터 전부 저장됐으면 동일 트랙의 뒷면에 저장됨

플래터가 두개 이상일 경우 에는 먼저 해당 실린더 부분을 다 채우게 됨

디스크 access time

= positioning time + transfer time
포지셔닝 타임
seek time + rotational time
read sector n 명령 수행 하기 위해서 arm을 해당하는 섹터에 위치시키는 시간
트랙간의 이동시간 = seek time
트랙이 회전하여 바늘 밑으로 해당 섹터가 위치하기까지 시간 = rotational time
seek > rotational time
트랜스퍼 타임
읽은 섹터값을 메모리(dram)으로 이동하는 시간, 포지셔닝 타임에 비해 굉장히 짧은 편

disk controller

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
    비슷하게 이동함

디스크 formatting

디스크 캐시

디스크 내의 플래터, 디스크 캐시 등이 존재. 만약 요청들어온 데이터가 캐시에 존재할 경우 플래터로 내려가서 찾지 않고 캐시의 해당 데이터값을 메모리에 바로올림
write의 경우 메모리에서 cache에 저장 후 리턴함 , 계속 이렇게 가다가 중간에 파워 나가면 캐시 내의 데이터가 다 날아감. 따라서 디스크는 내부적으로 캐시를 주기적으로 변경된 섹터를 저장함(싱크)

0개의 댓글