티스토리 뷰

안녕하세요 토니입니다😉
오늘은 지난번 1강에 이어 2강을 공부해볼건데요. 오늘은 양이 좀 많네요ㅎㅎ

그래서 저도 이걸 쓰는데 시간이 꽤나 걸렸어요..
하지만, 이번편 역시 전반적인 내용을 다루는 개요니까 조금은 더 마음 편하게, 한번 훑고 간단 생각으로
그냥 보면 될것같아요.
그냥 보세요!

여러분 프로세스라는 말 많이 들어보셨죠?
이게 뭐냐면요. 실행중인 프로그램이라는 뜻입니다.
아 그럼 실행중이지 않은 프로그램은 프로세스가 아니냐구여?
네 아니에요.
간단히 아주 간단히만 말하면,
프로그램은 하드디스크같은 저장장치에 저장되어 있는 정적인 상태구요.
프로세스는 이 프로그램이 실행을 위해 메모리에 올라온 동적인 상태입니다.
잘 이해가 안된다구요?
괜찮아요. 개요니까 단어랑 친숙해지는 것을 목표로 하자구요.
나중에 Deep Dive 하기로 하고, 단지 프로세스 = 실행중인 프로그램 이것만 알고 가자구요.
자 그럼 본격적으로 넘어가볼까요??

우선, CPU 스케줄링에 대해 알아보자구요.
말 그대로, CPU에 언제 어떤 프로세스를 할당할지 결정하는 작업이에요! 쉽죠???
그러면 어떤 어떤 방법이 있는지 하나씩 살펴보자구요.
FCFS[First-Come First Served]
말그대로 먼저온 순서대로!
자 어떤 작업이 다음과 같다고 볼까여?
오늘도 그려왔어요ㅎㅎ

위 그림처럼 P1 - P2 - P3의 순서대로 도착했다고 한다하면 각 프로세스가 기다리는 시간은 다음과 같이 되겠죠?
P1 = 0 / P2 = 24 / P3 = 27
앞 작업이 끝나길 기다려야 하니까요!
그럼 평균 웨이팅 타임을 계산해보면 (0 + 24 + 27) / 3 = 17 이 됩니다.
이러면 효율성 측면에서 썩 좋지않아요.
지난시간에 제일 강조했던게 뭐였죠?
그쵸 효율성이잖아요.
이게 왜 효율이 안좋은지를 보여주기위해, 똑같은 프로세스 들을 이용해서 순서만 다르게 들어온 경우를 보여드릴게여
도착순서를 P2 - P3 - P1이라고 가정해보죠.

자 그럼 각 프로세스가 기다린 시간을 계산해볼까요
P1 = 6 / P2 = 0 / P3 = 3 이 되겠네요!
그럼 평균 웨이팅 타임 계산해볼까요?
(6 + 0 + 3) / 3 = 3 이 나오네요.
17 vs 3
확연히 차이가 나는 것을 볼 수 있죠?
이렇게 스케줄링을 어떻게 하느냐에 따라 작업이 효율적이 되는지, 비효율적이 되는지 정해집니다!
그러니까 우리 모두 시간을 효율적으로 써봐요
자 그럼 next CPU 스케줄링 기법에 대해 살펴볼까요?
SJF (Shortest-Job-First)
이것도 말 그대로 CPU 사용시간이 가장 짧은 프로세스를 제일 먼저 스케줄링하는 기법이에요.
제가 아래에 또 그려왔어요!

이번엔 P2와 P3의 CPU 사용시간이 다르니, 이 점 참고해주시고요.
SJF는 minimum average waiting time을 보장합니다.
하지만 문제점이 하나 있어요.
Starvation(기아 현상)이 발생 가능해요.
이게 뭐냐면요...
음...효율성은 좋지만 형평성에 어긋나는 현상인데요.
CPU를 오래 쓰려는 녀석이 있다면요.. 걔는 CPU를 영원히 못쓰는 현상이 발생할 수 있는게 Starvation이에요.
자꾸 짧게 쓰려는 애들한테 CPU제어권을 줘버리니, 막상 길게 작업하는 경우는 자꾸 밀려서 평생 못쓰게 되는거죠..
쉽죠???????
그 다음 알아볼 기법은 RR(Round Robin) 인데요.
슬슬 지치시는거 다 알아요 아는데, CPU 스케줄링 마지막이니까 좀만 버텨요 우리.
이 기법은 각 프로세스가 동일한 CPU 할당시간을 갖는다는거에요.
할당시간이 끝나면 인터럽트가 발생하여 프로세스는 CPU를 빼앗기고 CPU 큐의 제일 뒤에 줄을 서게 되죠.
그래서 n개의 프로세스가 CPU큐에 있는 경우에는
-> 어떤 프로세스도 (n-1) * 할당시간 이상 기다리지 않아요.
-> 대기시간이 프로세스의 CPU 사용시간에 비례해요.
이게 말로는 너무 어려운데요.
이걸 그림으로 제가 그려올테니 한번 이해해봐요 같이

그래도 그림으로 부족할 수 있으니, P1이 10초, P2가 3초, P3가 5초 걸리는 작업이 있다해요. 그리고 할당시간은 1초로 정해져있다해요.
그럼 들어온 순서인 P1부터 1초씩만 작업하고,
다음 프로세스에 CPU를 할당하여 P2를 1초 작업하는거에요.
그럼 결과적으로 1초씩 번갈아가면서 매우 공평하게 작업을 수행하겠죠??
게다가 P2의 경우는 waiting time은 5초가 나오거든요.
그럼 설명 잠깐 했던 1번 조건인
어떤 프로세스도 (n-1)*할당시간 이상 기다리지 않음에 대입해보면 (3-1)*3 이니까 6이 나오는 걸로 보아
6초이상 걸리지않는걸 볼수가있죠?
이 Round Robin 기법이 이제 이해가 되시나요?
이제 CPU 스케줄링을 배웠으니, 메모리 관리를 배워볼 차례인데요.
이젠 진짜 위에 내용들보다 쉬우니까, 우리 집중력을 잃지말자 진짜.


위 그림처럼 실제 메모리는 용량이 부족할 수 있으니까 프로그램의 불필요한 영역은 올리지 않아요.
내가 해당부분만 필요하면 그 부분만 가져오는거죠.
방금 용량이 부족할 수 있으니까 라고 했죠. 그럼 만약에 메모리가 가득찬 경우는 어떻게 해야될까요?
뭘 어떡하긴 비워야지.

그럼 메모리에서 어떤 페이지를 쫓아내야할까요?

이렇게 메모리에 1부터 순서대로 쌓인 경우 디스크에서 5번을 올리고 싶을때 어떻게 쫓아내야할까요?
앞으로 어떤 프로세스가 안쓰일지 알수가없겠죠?
여러분은 미래를 예측할 때 어떻게하세요?

만약, 로또를 구매한다했을때, 지난주 당첨번호 그대로 넣으시는 분이 많을까요 안 그런분이 많을까요?
안 그런분이 많겠죠? (사실 확률은 같지만..)
왜 그렇게 할까요?
맞아여. 과거를 참고한거죠. 보통 미래를 모르는 상황에서 미래에 어떤 것이 사용될지 정할땐 과거를 봅니다.
메모리도 똑같아요.
LRU(Least Recently Used) - 가장 오래전에 참조된 페이지를 삭제하는 기법이에요. 사용한지 가장 오래되었으니, 앞으로도 사용할 일이 없겠다고 예측하는거죠. 위 그림을 빌리자면, 1이 제일 오래되었으니 1이 삭제된 후, 5가 들어와야 맞겠죠.

LFU(Least Frequently Used) - 참조 횟수가 가장 적은 페이지를 삭제하는 기법이에요.
이건 자주 사용하는 건 앞으로도 계속 사용할 확률이 높으니, 제일 적게 사용한것을 없애버리는 거죠. 위의 사진을 참고해서 이해하면 페이지 4가 가장 최근에 참조되었지만, 가장 적게 참조되었으니 삭제가 되겠죠??
어때요 쉽죠????
쉽다고말해
그럼 이제 CPU도 봤꼬, 메모리도 봤으니까, 디스크를 살펴봐야죠??

이건 짧아요 좀만참아
디스크 스케줄링에 앞서, 디스크 접근 시간의 구성을 잠깐 살펴봐요.
- 탐색시간(seek time)
- 헤드를 해당 트랙으로 움직이는데 걸리는 시간
- 회전지연(rotational latency)
- 헤드가 원하는 섹터에 도달하기까지 걸리는 시간
- 전송시간(transfer time)
- 실제 데이터의 전송시간
디스크 스케줄링
- seek time을 최소화하는 것이 목표

FCFS : 먼저 들어온 순서대로 스케줄링 하는 기법이에요.
SSTF : Shortest Seek Time First 현재 위치에서 누가 제일 가깝냐를 따지는 것. Starvation 발생가능
SCAN : 헤드가 디스크의 한쪽 끝에서 다른쪽 끝으로 이동하며 가능 길목에 있는 모든 요청을 처리. 다른 한쪽 끝에 도달하면 역방향으로 이동하며 오는 길목에 있는 모든 요청을 처리하며 다시 반대쪽끝으로 이동
내용이 많이 없어서 부득이하게 강의 챕쳐본 첨가ㅎ..


어떤가요
그래도 막상 끝내보니 뿌듯하고 아름답죠?
이렇게 그냥 한번 해봐요. 하루하루 할 수 있는 걸 하다보면, 나아지겠죠.
앞으로 다들 아주 작은 일을 하고나서도, 조용히 그리고 비장하게 "내가 해냄" 이렇게 속삭여보죠.
성취감 장난없거든요.

내가해냄.
'CS > 운영체제' 카테고리의 다른 글
| [운영체제] 반효경 3강 - 컴퓨터시스템의 구조 (1) (0) | 2024.08.21 |
|---|---|
| [운영체제] 반효경 1강 - 운영체제 개요 (1) (1) | 2024.07.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Encodable
- osi7계층
- 개발자 취업
- dataSource
- Publisher
- UITableViewDelegate
- DIP
- Codable
- Decodable
- 프로그래머스
- subscriber
- 야곰
- 화면 이동
- 운영체제
- Operator
- ios
- 의존성 주입
- 프로젝트에 적용
- 롯데그룹 공개채용
- Parse
- 취준
- 야곰 아카데미
- Combine
- Swift
- 공개 채용
- 반효경
- 스토리보드 분할
- 코딩테스트
- UITableViewDataSource
- 롯데 렌탈
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
글 보관함