[SW정글 71일차] OS 아키텍처의 근본 II

rg.log·2022년 11월 27일
0

SW 사관학교 JUNGLE

목록 보기
15/31

권영진 교수님의 두번째 OS 강의를 듣고 공부한 내용을 정리해본 글이다.

자원 공유

옛날 시스템에는 CPU가 하나뿐이고 메모리가 제한되어 있으므로 프로세스가 리소스를 공유해야했기 때문에 나온 개념이다.

  1. 시간 공유
    CPU 사용시 스케줄링을 통해 사용 시간을 공유한다.

  2. 공간 공유
    Memory 사용시 가상 메모리와 공간 재활용을 통해 공간을 공유한다.

1. Scheduling

CPU 스케줄러는 프로세스가 생성된 후 종료될 때까지 모든 상태 변화를 조정하는 일을 한다.

process가 ready상태다, wait상태다 라는 것은 status 머신으로 만들었다.

  1. preemptive (선점형 스케줄러)
    우선순위가 높은 프로세스(or 스레드)가 나타나면 현재 돌아가던 프로세스(or 스레드)를 ready상태로, 해당 프로세스(or 스레드)를 running상태로 바뀌는 스케줄 방법이다.

    반응성이 좋아야하는 일반 사용자들한테 좋다.
    예를 들면, 데스크탑의 스케줄링으로 좋다.

  2. non-preemptive (비선점형 스케줄러)
    선점형 스케줄러와 반대로 우선순위에 상관없이 현재 running하는 프로세스(or 스레드)가 일을 마치고 내려오면 ready하던 프로세스(or 스레드)가 running하는 기본적인 스케줄 방법이다.

    인터럽트를 덜 받아서 빠르다.
    변동이 잦지 않은 프로세스에게 좋다.

서버에서는 preemptive, non-preemptive를 적절히 섞어서 사용한다.

스케줄링 방식

대표적인 3가지 스케줄링 방식을 알아보자.
각 스케줄링 방식들은 결국 효율성과 프로세스간 공평성, 안전성 등을 생각하며 만들어졌기에 필요성을 생각하면 떠올리기 쉽다.

1) FIFO

장점 : 구현이 쉽다. 스케줄러를 생각하면 기본적으로 나도 떠올릴 수 있는 방법이다.

단점 : 각 프로세스별 매우 높은 응답 시간을 갖는다.(Convoy effect) 즉, 나중에 들어올수록 당연히 응답하기 위한 대기시간이 길다는 것.

2) SJF (수행시간이 짧은 것을 먼저)

장점 : FIFO의 단점을 커버한 매우 좋은 응답 시간을 갖는다.

단점 : 수행시간이 긴 프로세스들은 기회를 갖지 못한다.(Starvation)

사용시 개선 방법 예시 : 긴프로세스들이 짧은 프로세스가 새치기하는 걸 10번 이상은 안된다고 설정한다.

3) Round robin (정해진 일정 시간이 지나면 다음 프로세스로 교체)

장점 : SJF의 단점을 커버한 기아없는 동등한 응답 시간을 갖는다. time slice(정해진 일정 시간)를 짧게 하면 반응성은 좋아지지만 성능은 느려진다.

리눅스는 level별로 라운드로빈의 time slice를 다르게한 mlfq 방식을 사용한다!

단점 : 성능이 늦어질 수 있다. 정해진 일정 시간이 지난 후 1초만 더하면 끝나는 프로세스들도 ready하는 줄의 맨 뒤로 가서 기다려야 한다.

2. Paging

  1. page table 통해 주소를 참조하고자 한다.
  2. 해당 페이지가 메모리에 없어서 page fault가 발생한다.
  3. disk에 페이지를 찾으러간다.
  4. 물리 메모리로 page를 넘긴다
  5. PTE(페이지 테이블)를 업데이트한다.
  6. 해당 인스트럭션을 재시작한다.

교수님의 질문에 못다한 대답은 다시 공부를 해서 채워 넣어보려 한다.😂

Q page fault 가 무엇인가?

"프로세스가 페이지를 요청(demand)했을 때 해당 페이지가 메모리에 없는 경우를 말한다.
page fault 발생시 frame(물리 메모리)을 새로 할당 받아야 하며, 프로세스가 해당 page를 사용할 수 있도록 스왑 영역에서 메인 메모리로 옮긴다.
그 후 페이지 테이블을 재구성하고, 프로세스의 작업을 재시작한다."

가상 메모리의 페이지 테이블에는 페이지가 main memory에 있는지, swap area(disk)에 있는지 표시하는 valid bit을 사용한다. 0이면 disk에 있고, 1이면 memory에 있다는 뜻이다.

Q demand paging 은 무엇인가?

"페이징 기법을 토대로 프로세스의 일부 페이지들만 메모리에 적재하고, 나머지는 하드 디스크에 두어 페이지가 필요할 때 메모리를 할당받고 해당 페이지를 적재시키는 메모리 관리 기법이다."

demand는 페이지가 필요할 때까지 물리 메모리에 적재하지 않는다는 말로, 요구해야 메인 메모리에 적재시킨다는 것이다. 만약 demand를 했는데 메인 메모리가 부족하다면 page replacement가 발생한다.

Q systme call 은 무엇인가?

"OS에서 프로그램이 실행될 때 파일을 읽고, 쓰고, 출력하는 등을 커널 모드에서 한다. 하여 API를 이용해 커널 영역의 기능을 사용자 모드에서 사용 가능하게 하는 방법이다."

Q aging 은 무엇인가?

"어떤 프로세스가 작업을 위해 자원을 할당받아야 하는데 우선순위 등의 이유로 자원을 점유하지 못하지만 시간이 지날수록 우선순위가 높아져 결국 자원을 점유하게 만드는 방법이다."


추가로 공부해보면 좋다고 던져주신 키워드는 아래와 같다.

'work-conserving scheduler' vs 'non-work conserving scheduler'

work-conserving scheduler: 준비된 작업(jobs)이 있다면, 항상 자원을 사용 중으로 유지하려고 하는 스케줄러이다. CPU를 놀게 하지 않는다.

non-work conserving scheduler: 준비된 작업(jobs)이 있음에도 불구하고 자원을 유휴 상태로 둘 수 있는 스케줄러이다.

예를 들어, 네트워킹 및 패킷 스케줄링을 할 때 work-conserving scheduler는 전송할 패킷이 없을 때만 채널을 유휴 상태로 두지만, non-work conserving scheduler는 패킷 이 전송 대기 중인 상태에서 채널을 유휴 상태로 둘 수 있다.

또 하나의 예를 들면, 하나 이상 프로세서/코어가 사용 가능할 때의 CPU 스케줄링과 관련해, work-conserving scheduler는 실행 준비가 된 프로세스/쓰레드가 있는 경우 프로세서/코어가 유휴 상태가 아님을 보장한다.
non-work conserving scheduler는 CPU 스케줄링과 관련해, 실행 가능한 모든 프로세스의 작업의 수가 사용 가능한 메모리를 초과하여 비선형 페이지 스래싱 오버헤드가 발생할 우려가 있는 경우 프로세스를 실행 대기열에서 제외하도록 선택할 수 있다.

참고. work-conserving scheduler


오늘의 나는

디버깅을 하다가 도저히 못찾겠을 때 의장님의 방법처럼 산책을 해봤다. 짧게 5-10분정도. 아직은 다른 몸의 움직임으로 머리 속 신경이 파파팍 연결되어 깨닫지 못한 것을 깨닫진 못했지만 그러기 위해 더 많은 input을 넣어야할까 고민중이다.

0개의 댓글