2주차에는 "운영체제"를 배우고, 예상 질문과 답변을 작성해보고 서로 피드백하는 시간을 가졌습니다!!
자료구조, 데이터베이스, 네트워크 개념들은 이런저런 프로젝트를 하다보면 자연스럽게 접할 수 있어서 개념들을 볼때 어느정도 아는 내용이 많았지만,
운영체제는 학부때 배우고나서 실감이 될정도로 접할 기회는 없어서 특히 더 어려웠습니다...
생각없이 강의를 틀었다가 기억이 나지 않는 개념들에 당황해서 컴퓨터구조부터 어느정도 정리를 하고 시작했습니다.
앞에 30분정도 참고
https://www.youtube.com/watch?v=LBqJwmFMQHI&t=76s
컴퓨터 주요 구성요소
3️⃣ CPU (프로세서)
- 메모리에 저장된 명령어를 읽어들이고, 해석하고, 실행하는 부분
- ALU : 계산기
- 레지스터 : cpu내부의 작은 저장장치
- 종류 : 기억장치 버퍼 레지스터, 명령어 레지스터, 기억장치 주소 레지스터, 명령어 해독기, 프로그램카운터(PC), 누산기 ..
- 제어장치 : 제어신호(ex. 메모리 읽기, 쓰기 신호)를 내보내고, 명령어를 해석하는 장치
4️⃣ 메모리=주기억장치
- ex) RAM, ROM
- RAM : 자유롭게 읽고 쓸 수 있음, 휘발성메모리 → 메모리라고하면 보통 RAM을 말하긴함
- ROM : 읽을 수만 있는 기억장치, 비휘발성메모리
- 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부분
- 프로그램이 실행되려면 메모리에 저장되어 있어야한다
- 메모리에 저장된 값의 위치는 주소로 알 수 있다.
- 휘발성메모리
5️⃣ 보조기억장치 (디스크)
- ex) 하드 디스크, SSD, USB 메모리, DVD, CD-ROM
- 보관할 프로그램을 저장하는 부품
- 비휘발성메모리
6️⃣ 입출력 장치
CPU 동작과정
- CPU 제어장치가 메모리 읽기 신호보냄
- 메모리에서 1번지 명령어 읽어서 CPU 레지스터에 저장 & 해석 ⇒ 해석결과 : 3,4번지 데이터가 필요하겠군!
- CPU 제어장치가 메모리 읽기 신호보냄
- 메모리에서 3,4번 데이터 읽어서 CPU 레지스터에 저장 & ALU 연산장치가 연산 수행
- 결과값 레지스터에 저장
- 메모리에서 2번지 명령어 읽고, 메모리 쓰기 신호 보내서 → CPU 레지스터에 있던 결과값 저장
Multi thread VS Multi process
- 하나의 프로그램을 여러 프로세스로 실행할건지, 여러 스레드로 실행할건지를 묻는 문제
메모리 사용 / CPU 시간 | Context switching | 안정성 | |
multi process | 많은 메모리 공간 / CPU 시간 차지 | 느림 | 높음 |
multi thread | 적은 메모리 공간 / CPU 시간 차지 | 빠름 | 낮음 |
- 멀티프로세스
- 완전히 새로운 프로세스를 실행 시켜야해서 캐시메모리, PC register 등 새로 세팅할 것이 많음
- 멀티스레드
- 하나의 메모리 영역 공유 → 연산이 더 빠름
Paging
- 물리 메모리를 일정한 크기인 Frame으로 나누고, 논리 메모리를 Frame과 동일한 크기의 Page로 나눈다. 이후 필요한 Page를 Frame에 적재하고 실행한다.
- 외부단편화 X 내부단편화 O
- 내부 단편화
- 페이지 크기가 프로세스 크기보다 커서 메모리가 남지만, 다른 프로세스가 사용할 수 없는 상태
Segmentation
- 일정한 크기로 자르는 Paging과 달리, PCB, Code, Data, Stack 영역 등 논리적 내용을 기반으로 프로그램을 나누는 기법
- 외부 단편화 O 내부 단편화 X
- 외부 단편화
- 남아있는 메모리의 크기가 프로세스보다 크지만, 연속적이지 않은 공간에 존재하여 실행하지 못하는 현상
- Paged Segmentation
- segment + paging
- 세그먼트를 여러개의 페이지로 구성하는 방법
- 세그먼테이션 방식에서 발생했던, 외부 단편화 문제 해결 가능
스터디 후기
운영체제는 아무래도 완전히 로우단을 다루고 있어서 다른 과목들보다 추가 공부가 더 필요했습니다.
강의에서 multi process, multi thread의 개념과 특징, 차이점을 배우고, 이때 발생할 수 있는 동기화 문제를 해결하는 방법에 대해서도 알게됐습니다. 특히, Mutex, Semaphore 부분이 어려웠고 단순히 강의를 듣고 암기해 넘어갈 수 있는 부분이 아니라 계속 생각해보며 이해를 해야지 면접에서도 제대로 대답할 수 있다는 생각이 들었습니다.
스터디를 하면서도 다들 어려워하는 부분이라 조금 시간이 걸렸습니다. 그래도 혼자했으면 어려운 부분 나중에 해야지라는 생각으로 넘겼을 것 같은데, 스터디를 통해서 다른 분들이 답변외에도 추가적으로 개념을 설명해주셔서 너무 도움이 되는 시간이었습니다.
추가적인 개념을 이해하기전에 일단 빈출 개념부터 제대로 이해해야할 것 같습니다...
아래는 제가 예상 질문에 작성한 답변입니다.
Q. 운영체제에서 기아 상태에 대해 설명하고, 이를 해결하기 위한 방법은 무엇인가요?
A.
기아 상태란, 특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태를 말합니다. 어떤 자원을 오래 대기할수록, 해당 프로세스의 우선순위를 높여주는 방법인 에이징이 있습니다. 에이징은 우선순위가 낮아 대기 시간이 길어지는 경우, 한번 양보하거나 기다린 시간에 비례하여 일정 시간이 지나면 우선순위를 한단계씩 높여 가까운 시간안에 자원을 할당받도록 하여 기아상태를 방지합니다.
Q. 교착 상태에 대해 설명하고, 해결방법에 대해 설명해주세요.
A.
교착 상태란, 시스템 자원에 대한 요구가 뒤엉킨 상태로, 둘 이상의 thread가 각기 다른 thread가 점유하고있는 자원을 서로 기다릴 때, 무한 대기에 빠지는 상황을 말합니다. deadlock은 상호 배제, 점유 대기, 비선점, 순환 대기의 4가지 조건이 동시에 성립할 때 발생할 수 있습니다. 상호배제는 한 자원에 한 스레드만 접근이 가능한 것이고, 점유대기는 자원을 가진채 다른 자원을 기다리는 것, 비선점은 사용중인 다른 자원을 강제로 가져올 수 없는 것이고 순환대기는 그 구조가 순환을 이루고 있는 것입니다. deadlock 문제를 해결하는 방법에는 무시, 예방, 회피, 탐지/회복의 4가지 방법이 있습니다. 예방은 4가지 조건중 한개를 만족시키지 못하게 하는 것이고, 회피는 데드락이 발생하지 않도록 자원을 애초에 잘 배분하는 알고리즘을 사용하는 것입니다. 회피의 예로는 은행원 알고리즘이 있습니다. 복구는 데드락을 허용하고 주기적으로 데드락이 일어났나 검사하고 복구시키는 것이고, 무시는 데드락이 안 일어날 것으로 생각하고 무시하는 것입니다.
이상 스터디 후기였습니다
위 내용은 아래 강의를 듣고 작성한 내용입니다