CPU 스케줄링
프로세스의 상태
1) 한 프로그램이 I/O 키보드 입력을 요청하고 응답을 받았을 때, 디스크에 있는 해당 프로그램이 키보드 controller를 통해서 cpu에게 응답을 알려줌
2) CPU 권한이 운영체제로 넘어가게 되고, 키보드 입력을 기다리는 프로그램에게 원하는 응답이 들어왔다는 것을 알려준 후 프로그램에게 CPU 권한을 주고 CPU 큐에 기다리게 됨
3) 그 후 CPU를 얻어서 연산을 하고 연산 결과를 I/O를 통해서 화면에 출력해줌
스케줄링 종류
1. FCFS 스케줄링
- 먼저 온 CPU를 먼저 처리함
- CPU를 쓰겠다고 CPU 큐에서 여러 프로그램이 줄선 상황 → 간발의 차이로 순서는 정해져 있지만 세 개의 프로그램이 0초 시점에 CPU를 쓰겠다고 거의 동시에 도착함
→ 프로세서가 CPU를 사용하는 시간에 따라 평균 waiting time이 달라짐
2. SJF(Shortest-Job-First) 스케줄링
- CPU 사용시간이 가장 짧은 프로세스를 제일 먼저 스케줄링함
- 기다리는 시간을 가장 짧게 해줌 → minimum average waiting time을 보장
- 형평성에 문제가 생길 수 있음 → CPU를 길게 쓰려는 프로세서가 무한정 기다리게 될 수도 있음
- why? I/O과정에서 CPU큐에 자기보다 사용시간이 짧은 프로세서들이 계속 끼어들 수 있기 때문에!
3. RR(Round Robin) 스케줄링
- 현재 CPU에 가장 많이 사용되는 스케줄링
- 각 프로세스는 동일 크기의 CPU 할당 시간을 가짐
- 할당시간이 끝나면 인터럽트가 발생하여 프로세스는 CPU를 빼앗기고 CPU 큐의 제일 뒤에 줄을 섬 → 짧은 시간동안 CPU를 사용할 수 있는 방법
- n 개의 프로세스가 CPU 큐에 있는 경우
- 어떤 프로세스도 (n-1) * 할당시간 이상 기다리지 않음
- 대기시간이 프로세스의 CPU 사용시간에 비례함
메모리 관리
1. 각각의 실행파일을 실행시키면 그들이 메모리에 올라가서 프로세스가 됨
→ 메모리에 올라가기 전에 자신만의 가상 메모리를 만들고 가상 메모리 중 당장 필요한 부분만 물리적인 메모리에 올려놓게 됨
2. 물리적인 메모리가 다 차면, 그 다음 프로세서를 위해서 기존에 있는 메모리의 부분들을 스왑영역 디스크에 넣어둠
→ 스왑영역 디스크 : 메모리에서 쫓겨난 가상 메모리 부분을 보관하는 부분, 메모리의 연장공간이라고 생각하면 됨
3. 컴퓨터가 꺼지면 → 파일시스템은 유지되지만(비휘발성), 메모리는 자동적으로 사라짐. 스왑영역 디스크는(비휘발성) 남아있지만 전원을 끄면 프로세스들이 다 사라지기 때문에 의미가 없음
⬇️ 예시
- CPU가 먼저 1번 페이지를 요청함 → 1번은 현재 디스크에 있으므로 바로 접근할 수 없기 때문에 운영체제가 디스크 컨트롤러에 요청해서 메모리에 올라감
- 또 다시 1번을 요청하면 메모리에 올라와 있는 상태이므로 메모리에 있는 페이지를 사용 ⇒ 이러한 과정을 반복함
- 이렇게 반복하다가 메모리가 다 차게 되면 메모리의 한 부분을 쫓아내야 됨
- 나중에 다시 사용될 가능성이 높은 페이지는 쫓아내지 말고 낮은 페이지를 쫓아냄 (효율성을 생각) ⇒ 과거를 보고 예측을 함
- 페이지를 쫓아내는 방법
- LRU
- 가장 오래 전에 참조 페이지를 삭제함 → 페이지 1번 삭제
- LFU
- 참조횟수 (사용된 횟수) 가 가장 적은 페이지 삭제 → 페이지 4번 삭제
디스크 스케줄링
- 헤드의 이동거리를 줄이는 방향으로 스케줄링을 함
- why? 헤드를 해당 트랙으로 움직이는데 걸리는 시간인 탐색시간(Seek time)이 더 오래 걸리기 때문에!
- SSTF 방법을 사용할 경우 : seek time이 가장 짧은 것을 먼저 처리해주는 방법
→ starvation 문제 : 누군가는 영원히 서비스를 못받고 기다려야 되는 문제가 생길 수 있음
💡 제일 많이 쓰는 방법 : SCAN
- 헤드가 디스크의 한쪽 끝에서 다른쪽 끝으로 이동하며 중간에 요청이 들어온 부분을 처리하고 끝에 다다르면 헤더가 방향을 바꿔서 다시 돌아감
- 헤드의 이동거리가 짧아짐
- 엘리베이터 스케줄링을 기반으로 두고 있음
저장장치 계층구조와 캐싱
- 위로 갈수록 용량은 작으면서 빨라짐 → 모든 원본 데이터는 제일 아래에 저장되어 있고 필요할 때 위로 읽어서 쓰도록 함
- Cache Memory : CPU와 메인 메모리의 속도 차이를 개선하기 위해 생성된 계층
- 계층구조를 하는 이유 : 속도 차이를 완충하기 위해
- 캐싱 : 중간 경로에 메모리를 저장해놓고 복사본을 주면 똑같은 메모리를 다시 요청할 때 시간을 줄일 수 있음 (재사용성)
- Primary부분은 cpu가 직접 접근할 수 있음, Secondary는 I/O 컨트롤러에게 요청을 해서 위로 읽어들여야함
운영체제의 종류
1. 데스크톱 운영체제
- Windows, Mas OS, Linux가 전체 시장 지배
2. 서버 컴퓨터 운영체제
- 네트워크에 연결하여 항상(24시간) 실행되는 컴퓨터
- 보안 중요함
- Windows Server
3. 모바일 운영체제
- 모바일 전화기, 스마트폰, 태플릿 컴퓨터 등 다양한 이동용 혹은 휴대용 장치에서 실행되도록 만들어진 운영체제
- Android, IOS, Windows Mobile
4. 임베디드 운영체제
- 임베디드 컴퓨터에서 장치들을 제어하고 작동시키는 기능
- WinCE, 여러 종류의 임베디드 리눅스
5. 실시간 운영체제
- 실시간 애플리케이션 혹은 태스크를 각각 정해진 데드라인 시간 이내에 처리되도록 보장하는 것을 목표
- PSOS, VxWorks
- 공개 소프트웨어 : Linux, Android → 독점적 소프트웨어를 방지하기 위해(어짜피 망했으니까 공짜로 소프트웨어를 내놓고 시장의 점유율을 채우기 위해)
운영체제의 예
1. 유닉스(Unix)
- 큰 서버를 위해서 만들어짐
- 코드의 대부분을 C언어로 작성 → 하드웨어를 다루기 위해 어려운 어셈블리어가 아닌 C언어로 작성함
- 높은 이식성 → 처음부터 굉장한 확장성을 위해서 만들어짐
2. DOS
- 개인용 컴퓨터를 위해서 만들어짐
- 단일 프로그램만 실행 → 단일 사용자를 위해서 만들어짐
3. MS windows
- DOS 발전해서 업그레이드가 이루어짐
- 여러 프로그램을 동시에 실행함
'Computer Science > OS' 카테고리의 다른 글
[운영체제] 운영체제는 무슨 일을 할까? (컴퓨터 구조와 관련지어) (0) | 2024.06.12 |
---|---|
[운영체제] 컴퓨터 시스템의 구조와 시스템 콜, Interrupt (0) | 2024.05.14 |
[운영체제] 운영체제란? (0) | 2024.05.07 |