[인프런 워밍업클럽 CS 2기] 2주차 발자국
어느덧 2주차에 접어들었습니다.
이번주도 너무 빠르게 지나간 것 같아 아쉬워요.
그렇지만 많은 것을 했기에 나름 뿌듯함이 있는 주였습니다.
가장 좋은 것은 이번주부터 발표스터디를 시작했다는 것입니다. (신청한 과거의 나 칭찬해...)
발표를 해야하니 자동으로 빡세게 공부해야함+발표자료도 잘 만들어야 함+모르면 쪽팔림... 등등
여러 요소들이 복합적으로 작용해서 원래 스터디에 참여한 제대로 공부한다는 목적을 잘 달성하고 있어서 좋습니다.
단점은... 복습+준비+정리까지 시간이 좀 많이 걸린다는 것이 있습니다.
- 이번주에 공부한 내용의 키워드 -
운영체제
CPU스케줄링 알고리즘: SJF, RR(Round Robin), MLFQ
프로세스 간 통신
공유자원과 임계구역. 임계구역 문제 해결을 위한 상호배제 메커니즘
상호배제 메커니즘: 세마포어, 모니터(세마포어 단점 해결)
교착상태(데드락) 문제와 해결방법
은행원 알고리즘
안정상태/불안정상태
가벼운/무거운 교착 상태검출
자료구조와 알고리즘
재귀
하노이탑
버블정렬
선택정렬
- 이번주에 공부한 내용 요약 -
운영체제
CPU 스케줄링 알고리즘 중에서 FIFO는 작업 순서에 따라 평균 대기시간이 달라져요. 그렇다면 burst time이 짧은 프로세스 먼저 실행하는 알고리즘을 만들면 되는 것 아니냐!라는 아이디어로 Shortest Jop First(SJF) 알고리즘이 등장했습니다.
SJF는 이론적으로 FIFO보다 성능이 좋지만 프로세스가 얼마나 실행될지 예측이 어렵고, burst time이 긴 프로세스는 계속 뒤로 밀린다는 불공평성 때문에 SJF는 쓰이지 않게 되었습니다.
앞선 알고리즘들이 단점이 있자 이를 보완한 알고리즘은 Round Robin(RR)알고리즘이 등장했습니다.
한 프로세스에게 일정시간(=타임슬라이스)만큼 CPU를 할당하고 할당시간이 지나면 강제로 뺏어서 다른 프로세스에게 일정시간만큼 CPU를 할당하는 방법을 의미합니다.
RR의 성능은 타임슬라이스 값에 따라 달라져서 적절한 값을 주는 것이 가장 중요합니다.
작업을 하다보면 손해보는 프로세스가 생기기도 하는데 이를 해결하기 위해 RR에서 업그레이드된 알고리즘인 MLFQ(Multi Level Feedback Queue)가 등장했어요. 이 방법이 오늘날 운영체제에서 가장 일반적으로 쓰이는 CPU스케줄링 기법입니다.
프로세스는 다른 프로세스와 데이터를 주고받으며 통신하기도 해요. 프로세스 간 통신을 하다보면 공동으로 이용하는 변수나 파일들이 생기는데 이것을 '공유자원'이라 합니다.
그런데 공유자원을 쓰다보면 자원에 여러 프로세스가 동시에 접근하는 것과 같은 문제가 생기기도 합니다. 이런 문제들을 '동기화 문제'라고 합니다.
동기화 문제 해결을 위해 여러 프로세스가 동시에 사용하면 안되는 영역인 '임계구역'을 정의하게 되었습니다.
임계구역 문제 해결을 위해 '상호배제 메커니즘'이 필요해요.
상호배제 메커니즘으로는 '세마포어', '모니터'가 있어요
세마포어는 동기화에서 가장 중요한 개념입니다. 공유자원을 지키는 열쇠같은 개념으로 이를 사용하면 여러 프로세스가 동시에 공유자원에 접근하지 못하게 할 수 있습니다.
세마포어는 wait, signal 함수를 사용하는데 이 순서가 잘못 호출되면 세마포어를 잘못 사용할 가능성이 있어요. 그래서 등장한 것이 '모니터'입니다.
모니터(컴퓨터 모니터 아님...)는 운영체제가 처리하는 것이 아니라 프로그래밍 언어차원에서 지원합니다. 대표적으로 자바에서 모니터를 지원해요.
모니터 구현만 완벽하다면 세마포어처럼 wait, signal로 감싸지 않아도 되어서 편하고 안전하게 코드 작성이 가능합니다.
자료구조와 알고리즘
재귀는 어떤 것을 정의할 때 자기 자신을 참고하는 것을 의미합니다.
재귀함수를 정의해서 쓸 때는 탈출조건이 반드시 있어야합니다.
콜스택은 함수가 호출되면서 올라가는 메모리 영역을 의미합니다.(=스택 자료구조)
함수를 호출하면 콜스택에 올라가고 함수가 종료되면 콜스택에서 제거됩니다.
재귀함수를 사용해서 해결하는 대표적인 문제로 '하노이 탑'이 있습니다.
버블정렬은 가장 쉽게 생각할 수 있는 정렬방법 중 하나입니다.
앞에서부터 바로 옆의 숫자와 크기를 비교하고 자리를 바꾸는데 이 과정을 끝까지 확인해가며 정렬하는 방법입니다.
방법은 간단한데 성능이 좋지않다는 단점이 있습니다.
버블정렬처럼 구현은 쉬운데 성능은 그닥 좋지 못한 알고리즘으로 '선택정렬'이 있습니다.
선택정렬은 배열의 처음부터 마지막까지 쭉 확인한 다음 작은 값을 처음으로 가지고 옵니다. 정렬되지 않은 영역을 대상으로 정렬이 완료될 때까지 이 방법을 쭉 반복합니다.
- 간단하게 이번 주 회고 -
우여곡절 끝에 발표 스터디가 이번주부터 시작되었습니다. 다들 잘하는 분들로 모여서 나만 뒤쳐질 수는 없다!는 생각으로 따라가고 있습니다. 아마 이분들과 스터디를 하지 않았다면 강의 그냥 한번 보고 다음에 또 봐야지 했을 것 같아요. 스터디에서 발표도 해야하고 강의 내용으로 얘기도 해야 해서 정말 많이 복습했어요. 덕분에 이번 스터디 끝나면 배운 내용이 머리에서 떠나지는 않을 것 같습니다.
(▲ 스터디에 사용한 발표자료 중 하나...)
어느덧 2주차가 마무리되었습니다. 주차가 거듭될수록 강의 내용이 더 많아지고 있는데 강의가 재미있어서 정말 다행입니다... 이제 3주차에 접어들게 되는데 계속 꾸준하게 강의 듣고 스터디를 해서 목표한 바를 이루도록 노력해야겠습니다.
댓글을 작성해보세요.