Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8주차 모의 면접 질문 정리 (OS 3.1 ~ 3.3) #31

Open
kyeong-hyeok opened this issue Mar 2, 2024 · 0 comments
Open

8주차 모의 면접 질문 정리 (OS 3.1 ~ 3.3) #31

kyeong-hyeok opened this issue Mar 2, 2024 · 0 comments
Assignees
Labels

Comments

@kyeong-hyeok
Copy link
Contributor

kyeong-hyeok commented Mar 2, 2024

운영체제란 무엇인지 그리고 운영체제의 역할에 대해 말씀해 주세요.

운영체제(OS, Operating System)는 컴퓨터 시스템의 핵심 소프트웨어로, 컴퓨터 하드웨어와 응용 프로그램 간의 상호작용을 관리하고 제어하는 역할

  • CPU 스케줄링과 프로세스 관리: CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환 관리
  • 메모리 관리: 한정된 메모리를 프로세스에 할당하는 것 관리
  • 디스크 파일 관리: 디스크 파일 보관, 관리
  • I/O 디바이스 관리: I/O 디바이스 간에 데이터를 주고받는 것 관리

캐시 메모리를 왜 사용하나요?

  • 캐시는 데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다.
  • 실제로 메모리와 CPU 사이의 속도 차이가 너무 크기 때문에 그 중간에 레지스터 계층에 둬서 속도 차이를 해결한다.

Critical Section(임계영역)에 대해 설명해주세요.

  • 임계 영역이란 프로세스간에 공유자원을 접근하는데 있어 문제가 발생하지 않도록 한번에 하나의 프로세스만 이용하게끔 보장해줘야 하는 영역을 말합니다.
  • 상호배제 : 한 프로세스가 임계영역에 들어갔을 때 다른 프로세스는 들어갈 수 없음
  • 한정대기 : 특정 프로세스가 영원히 임계영역에 들어가지 못하면 안됨
  • 융통성 : 만약 어떠한 프로세스도 임계영역을 사용하지 않는다면 임계영역 외부의 어떠한 프로세스도 들어갈 수 있으며 프로세스끼리 방해하지 않음

세마포어와 뮤텍스의 차이에 대해 설명해보세요.

  • 세마포어는 여러개의 프로세스가 접근 가능한 공유자원을 관리하는 방식이고, 뮤텍스가 될 수 있지만, 뮤텍스는 한 번에 한 개의 프로세스만 접근 가능하도록 관리하는 방식입니다. 따라서 뮤텍스는 세마포어가 될 수 없습니다.
  • 또, 세마포어는 다른 프로세스가 세마포어를 해제할 수 있지만, 뮤텍스는 락을 획득한 프로세스만 락을 반환할 수 있습니다.

교착 상태의 원인

  • 상호 배제 : 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들이 접근 불가능
  • 점유 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태
  • 비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없음
  • 환형 대기 : 프로세스 a는 프로세스 b의 자원을 요구하고, 프로세스 b는 프로세스 a의 자원을 요구하는 등 서로가 서로의 자원을 요구하는 상황
  • 해결방법
    • 예방: 4가지 조건 중 하나라도 만족되지 않도록 합니다.
    • 회피: 알고리즘을 데드락이 발생하지 않도록 합니다.
    • 회복: 교착상태가 발생할 때, 해결합니다.
    • 무시: 회복과정의 성능저하가 심하다면 그냥 무시합니다.

컨텍스트 스위칭에 대해 설명해보세요.

  • 컨텍스트 스위칭은 한 Task가 끝날 때까지 기다리는 것이 아니라 여러 작업을 번갈아가며 실행해서 동시에 처리될 수 있도록 하는 방법입니다.
  • 인터럽트가 발생하면 현재 프로세스의 상태를 PCB에 저장하고 새로운 프로세스의 상태를 레지스터에 저장하는 방식으로 동작합니다. 이 때, CPU는 아무런 일을 하지 않으므로 잦은 컨텍스트 스위칭은 성능저하를 일으킬 수 있습니다.
  • 스레드와 프로세스의 동작방식이 약간 상이한데, 스레드는 캐시메모리나 PCB에 저장해야하는 내용이 적고, 비워야 하는 내용도 적기때문에 상대적으로 더 빠른 컨텍스트 스위칭이 일어날 수 있습니다.

스레싱에 대해서 설명해주세요.

  • 메모리의 페이지 폴트율이 높은 것을 의미하며, 이는 컴퓨터의 심각한 성능 저하를 일으킨다.
  • 스레싱은 메모리에 많은 프로세스가 동시에 올라가게 되면 스와핑이 많이 일어나서 발생한다.
  • 페이지 폴트가 일어나면 CPU 사용률이 줄어들고 운영체제는 착각하여 가용성을 높이기 위해 프로세스를 더 추가한다.
  • 이를 해결하기 위해 메모리를 늘리거나, HDD를 사용한다면 SSD로 바꾸는 방법이 있다.

멀티 프로세스 대신 멀티 스레드를 사용하는 이유 (멀티스레드 프로그래밍에 대해 설명해보세요.)

  • 멀티스레드 프로그래밍은 하나의 프로세스에서 여러개의 스레드를 만들어 자원의 생성과 관리의 중복을 최소화하는 것을 멀티스레드 프로그래밍이라고 합니다.
  • 장점
    • 멀티 프로세스에 비해 메모리 자원소모가 줄어듭니다.
    • 힙 영역을 통해서 스레드간 통신이 가능해서 프로세스간 통신보다 간단합니다.
    • 스레드의 컨텍스트 스위칭은 프로세스의 컨텍스트 스위칭보다 빠릅니다.
  • 단점
    • 힙 영역에 있는 자원을 사용할 때는 동기화를 해야합니다.
    • 동기화를 위해서 락을 과도하게 사용하면 성능이 저하될 수 있습니다.
    • 하나의 스레드가 비정상적으로 동작하면 다른 스레드도 종료될 수 있습니다.

Thread-safe 하다는 의미와 설계하는 법을 설명해보세요.

두 개 이상의 스레드가 race condition에 들어가거나 같은 객체에 동시에 접근해도 연산결과의 정합성이 보장될 수 있게끔 메모리 가시성이 확보된 상태를 의미합니다.

  • java.util.concurrent 패키지 하위의 클래스를 사용합니다.
  • 인스턴스 변수를 두지 않습니다.
  • Singleton 패턴을 사용합니다.(이 때, 일반적으로 구현하는 Singleton Pattern은 Thread-safe 하지 않습니다.)
  • 동기화(syncronized) 블럭에서 연산을 수행합니다.

PCB에 대해서 설명해주세요.

  • 운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터를 말한다.
  • 프로세스 제어 블록이라고 불리고 프로세스가 생성되면 운영체제는 해당 PCB를 생성한다.
  • 프로세스의 메타데이터들이 PCB에 저장되어 관리되고, 중요한 정보들이기 때문에 일반 사용자가 접근하지 못하도록 커널 스택의 가장 앞부분에서 관리한다.

페이지 교체 알고리즘 종류와 방식 설명

  • 오프라인 알고리즘: 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘 (이상적으로 사용할 수 없는 알고리즘)
  • FIFO: 가장 먼저 온 페이지를 교체 영역에 가장 먼저 놓는 방법 의미
  • LRU(Least Recentle Used): 참조가 가장 오래된 페이지를 바꿈 (오래된 것을 파악하기 위해 각 페이지마다 계수기, 스택을 두어야 하는 문제)
  • NUR(Not Used Recently)
    • LRU에서 발전한 알고리즘으로 clock 알고리즘이라고 함
    • 먼저 0(최근에 참조되지 않음)과 1(최근에 참조)을 가진 비트를 두고, 시계 방향으로 돌면서 0을 찾는 순간 해당 프로세스를 교체하고 1로 바꾸는 알고리즘
  • LFU(Least Frequently Used): 가장 참조 횟수가 적은 페이지를 교체
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants