[인프런 워밍업클럽 CS 2기] 2주차 발자국

[인프런 워밍업클럽 CS 2기] 2주차 발자국

어느덧 2주차에 접어들었습니다.

이번주도 너무 빠르게 지나간 것 같아 아쉬워요.

그렇지만 많은 것을 했기에 나름 뿌듯함이 있는 주였습니다.

가장 좋은 것은 이번주부터 발표스터디를 시작했다는 것입니다. (신청한 과거의 나 칭찬해...)

발표를 해야하니 자동으로 빡세게 공부해야함+발표자료도 잘 만들어야 함+모르면 쪽팔림... 등등

여러 요소들이 복합적으로 작용해서 원래 스터디에 참여한 제대로 공부한다는 목적을 잘 달성하고 있어서 좋습니다.

단점은... 복습+준비+정리까지 시간이 좀 많이 걸린다는 것이 있습니다.
image

 

- 이번주에 공부한 내용의 키워드 -

운영체제

  • 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로 감싸지 않아도 되어서 편하고 안전하게 코드 작성이 가능합니다.

 

자료구조와 알고리즘

  • 재귀는 어떤 것을 정의할 때 자기 자신을 참고하는 것을 의미합니다.

  • 재귀함수를 정의해서 쓸 때는 탈출조건이 반드시 있어야합니다.

  • 콜스택은 함수가 호출되면서 올라가는 메모리 영역을 의미합니다.(=스택 자료구조)

  • 함수를 호출하면 콜스택에 올라가고 함수가 종료되면 콜스택에서 제거됩니다.

  • 재귀함수를 사용해서 해결하는 대표적인 문제로 '하노이 탑'이 있습니다.

  • 버블정렬은 가장 쉽게 생각할 수 있는 정렬방법 중 하나입니다.

  • 앞에서부터 바로 옆의 숫자와 크기를 비교하고 자리를 바꾸는데 이 과정을 끝까지 확인해가며 정렬하는 방법입니다.

  • 방법은 간단한데 성능이 좋지않다는 단점이 있습니다.

  • 버블정렬처럼 구현은 쉬운데 성능은 그닥 좋지 못한 알고리즘으로 '선택정렬'이 있습니다.

  • 선택정렬은 배열의 처음부터 마지막까지 쭉 확인한 다음 작은 값을 처음으로 가지고 옵니다. 정렬되지 않은 영역을 대상으로 정렬이 완료될 때까지 이 방법을 쭉 반복합니다.


- 간단하게 이번 주 회고 -

우여곡절 끝에 발표 스터디가 이번주부터 시작되었습니다. 다들 잘하는 분들로 모여서 나만 뒤쳐질 수는 없다!는 생각으로 따라가고 있습니다. 아마 이분들과 스터디를 하지 않았다면 강의 그냥 한번 보고 다음에 또 봐야지 했을 것 같아요. 스터디에서 발표도 해야하고 강의 내용으로 얘기도 해야 해서 정말 많이 복습했어요. 덕분에 이번 스터디 끝나면 배운 내용이 머리에서 떠나지는 않을 것 같습니다.

image(▲ 스터디에 사용한 발표자료 중 하나...)

 

어느덧 2주차가 마무리되었습니다. 주차가 거듭될수록 강의 내용이 더 많아지고 있는데 강의가 재미있어서 정말 다행입니다... 이제 3주차에 접어들게 되는데 계속 꾸준하게 강의 듣고 스터디를 해서 목표한 바를 이루도록 노력해야겠습니다.

 

 

 

댓글을 작성해보세요.

채널톡 아이콘