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

운영체제 면접 질문 정리 #53

Open
krrong opened this issue Dec 15, 2023 · 47 comments
Open

운영체제 면접 질문 정리 #53

krrong opened this issue Dec 15, 2023 · 47 comments
Assignees

Comments

@krrong
Copy link
Collaborator

krrong commented Dec 15, 2023

  • 프로세스와 스레드 차이는 무엇인가요?

    • 멀티프로세스와 멀티스레드 차이는 무엇인가요?
  • 컨텍스트 스위칭(Context Switching)에 대해 설명해주세요

  • 뮤텍스와 세마포어에 대해 설명해주세요

    • 이진세마포어와 뮤텍스 차이는 무엇인가요?
  • 데드락 발생조건 4가지 설명해주세요

    • 해결방법에 대해 설명해주세요 -> (예방, 회피 - 은행원 알고리즘(Banker's algorithm), 탐지, 회복)
  • 동기와 비동기의 차이가 무엇인가요?

  • CPU 스케줄링 종류는 무엇이 있나요?

  • 메모리 구조 및 특성에 대해 설명해주세요 (스택, 힙 등)

  • 내부 단편화와 외부 단편화에 대해 설명해주세요

    • 해결 방법은 무엇이 있나요? (페이징, 세그먼테이션)
  • 인터럽트에 대해 설명해주세요

  • 캐시 메모리를 사용하는 이유와 상황 및 응용

  • 시스템콜이란?

  • 동시성과 병렬성의 차이는?

  • Stack overflow가 생기는 경우와 Heap overflow가 생기는 경우 예시 한가지씩

  • 여러 스레드에서 공유 자원을 접근할 때 주의점은?

  • synchronized 키워드를 메소드에서 쓰는 것과 block으로 사용하는 것의 차이점

  • 임계 영역 문제가 발생하지 않도록 충족해야하는 3가지 조건은?

  • 싱글톤에서 발생할 수 있는 동시성 문제에 대해 설명해주세요

  • 선점형 스케줄링과 비선점형 스케줄링의 차이

  • 가상 메모리의 장점은?

  • 요구 페이징(demand paging)이란?

  • 쓰레드마다 독립적으로 스택영역을 갖는 이유는?

  • 데드락이 무엇인가요?

  • 콘보이 현상(convoy effect)이란 무엇인가요?

    • 콘보이 현상이 발생될 수 있는 CPU 스케줄러 알고리즘은 무엇인가요?
  • 인터럽트 발생 시 수행 과정을 간략히 설명해주세요.

  • 프로세스의 상태변화에 대해 설명해주세요.

  • 힙 영역에서 메모리 누수는 어떻게 예방할 수 있을까요?

  • multi process환경에서 process간에 데이터를 어떻게 주고 받을까요?

    • 공유메모리와 메시지 전달 모델의 장단점을 설명해 주세요.
  • Thread-safe에 대해 설명해주세요.

  • Round Robin 스케줄링 알고리즘을 사용할 때, Time Slice에 따른 trade-off를 설명해주세요.

  • 시스템 콜 필요한 이유는 무엇인가요?

  • 프로그램은 무엇인가요?

  • 사용자 모드에서 커널모드의 자원에 접근할 수 있는 방법이 있나요?

  • 외부조각으로 인해 생겨날 수 있는 문제점이 무엇인가요?

  • 최악적합을 사용하는 이유는 무엇인가요?

  • PCB가 무엇인지 설명해주세요.

  • 프로세스 동기화가 무엇인지, 동기화 방법에는 무엇이 있는지 설명해주세요.

  • 커널은 무엇인가요?

  • 좀비 프로세스, 고아 프로세스에 대해 설명해주세요.

  • CPU 스케줄링 알고리즘에서 기아 상태(Starvation)란 무엇인가요?

  • 크롬 브라우저에서 한 탭에 오류가 생기더라도, 다른 탭에 영향을 끼치지 않습니다. 그렇다면 각각의 크롬 탭은 프로세스일까요? 쓰레드일까요?

  • 페이징과 세그먼테이션의 차이점은 무엇일까요?

  • 스레싱이란 무엇인가요?

  • MMU의 역할을 얘기해주세요.

@s9hn
Copy link
Member

s9hn commented Dec 20, 2023

프로세스와 스레드 차이는 무엇인가요?

프로세스는 컴퓨터에서 실행 중인 하나의 프로그램을 의미한다.
프로세스는 한 개 이상의 스레드를 가진다.
스레드는 프로세스에서 실제로 실행되는 흐름의 단위로 프로세스보단 좀 더 작은 단위이다.

@no1msh
Copy link
Collaborator

no1msh commented Dec 20, 2023

멀티프로세스와 멀티스레드 차이는 무엇인가요?

멀티 프로세스는 공유자원이 없고 공유를 하고싶다면 IPC를 사용해야합니다.
반면 멀티스레드는 스택을 제외한 힙, 데이터, 코드 부분을 공유한다는 차이점이 있습니다.

@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Dec 20, 2023

컨텍스트 스위칭(Context Switching)에 대해 설명해주세요

멀티 프로세스 환경에서 CPU가 처리 중인 프로세스의 정보를 바꾸는 것을 말합니다.
멀티 스레드를 처리할 때도 컨텍스트 스위칭이 사용됩니다.

@hyemdooly
Copy link
Collaborator

hyemdooly commented Dec 20, 2023

뮤텍스와 세마포어에 대해 설명해주세요
자고 있는 프로세스를 깨우는 방식? 우선순위? << 이건 모르겠다

뮤텍스는 동기화 대상이 오직 하나일 때 사용, 세마포어는 동기화 대상이 1개 이상일 때 사용합니다.
또한 뮤텍스는 락킹 매커니즘을 사용합니다. 락킹 매커니즘이란 임계 영역에 접근한 프로세스가 락을 거는 것을 말합니다. 이 때 spinlock을 사용하면 접근하지 못한 프로세스는 락이 풀렸는지 반복문을 돌며 계속해서 직접 확인하게 할 수 있습니다.
세마포어는 시그널링 매커니즘을 사용합니다. 시그널링 매커니즘은 공유 자원에 접근한 프로세스가 접근을 해제하면 다른 프로세스가 접근할 수 있도록 신호를 보내는 방식입니다.

@krrong
Copy link
Collaborator Author

krrong commented Dec 20, 2023

이진 세마포어와 뮤텍스 차이는 무엇인가요?

기능적으로 하는 일은 같습니다. 서로 다른 프로세스의 상호배제를 위해 사용합니다.
이진 세마포어는 언제든 임계영역에 접근이 가능한 프로세스의 양을 조절할 수 있지만, 뮤텍스는 단 하나의 프로세스만 접근하도록 할 수 있습니다.

@sujin9
Copy link
Collaborator

sujin9 commented Dec 20, 2023

데드락 발생조건 4가지 설명해주세요

  1. 상호배제: 하나의 공유 자원에는 하나의 프로세스만 접근할 수 있습니다.
  2. 점유와 대기: 프로세스가 최소 하나의 자원을 점유하고 있는 상태에서, 추가로 다른 자원을 점유하기 위해 대기합니다.
  3. 비선점: 다른 프로세스에 할당된 자원을 뺏어올 수 없습니다.
  4. 환형 대기: 프로세스가 앞이나 뒤에 있는 프로세스의 자원을 요구합니다.

위의 4가지 조건이 모두 해당될 때 데드락이 발생합니다.

@s9hn
Copy link
Member

s9hn commented Dec 20, 2023

데드락 해결방법에 대해 설명해주세요 -> (예방, 회피 - 은행원 알고리즘(Banker's algorithm), 탐지, 회복)

예방

  1. 상호배제 부정: 여러 프로세스가 동시에 하나의 공유 자원을 사용할 수 있게 한다.
  2. 점유와 대기 부정: 프로세스가 실행되기 전에 필요한 모든 자원을 할당함으로써 프로세스 대기를 없앤다.
    • 또는 프로세스가 자원을 점유하지 않은 상태에서만 자원을 요구하게 한다.
  3. 비선점 부정: 자원을 점유한 프로세스가 다른 자원을 요구할 때 점유한 자원을 반납하게 한다.
  4. 환형 대기 부정: 자원을 선형 순서로 정렬해 고유 번호를 할당한다. 그리고 각 프로세스에서 요구할 수 있는 번호의 방향을 정해서 한쪽 방향으로만 자원을 요구하게 한다.

회피

  1. 프로세스의 시작 중단
  2. 자원 할당 거부

탐지
말 그대로 시스템에 데드락이 발생했는지에 대한 여부를 탐색하고 회복 기법 알고리즘에 활용하는 것을 의미.
교착상태가 탐지되었다면 회복 기법을 통해 교착상태를 복구한다.
그러나 탐지 기법은 지속적으로 교착상태를 확인하는 작업이 필요하기 때문에 오버헤드(성능 저하)가 발생.

회복

  1. 프로세스의 강제 종료를 통한 회복
  2. 선점을 통한 회복

@no1msh
Copy link
Collaborator

no1msh commented Dec 20, 2023

동기와 비동기의 차이가 무엇인가요?

동기는 동시에 일어난다는 뜻이고, 요청에 따른 결과가 그자리에서 주어진다는 뜻입니다. 따라서 순차적 실행이 보장됩니다.
비동기는 요청과 동시에 결과가 주어지지 않음을 의미하고, 순차적 실행을 보장하지 않습니다.

@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Dec 20, 2023

CPU 스케줄링 종류는 무엇이 있나요?

비선점형 스케줄링과 선점형 스케줄링으로 나눌 수 있습니다.

비선점형 스케줄링은 실행 중인 프로세스가 종료될 때까지 다른 프로세스를 실행할 수 없음을 의미하고
FCFS(First Come First Served), SJF(Shortest Job Forst), HRRN(Hightes Response Ratio Next)가 있습니다.

선점형 스케줄링은 스케줄러가 실행 중인 프로세스를 중단시키고 다른 프로세스를 실행할 수 있음을 의미하며
RR(Round Robin), SRTF(Shorest Remaining Time First), 멀티레벨이 있습니다.

@hyemdooly
Copy link
Collaborator

hyemdooly commented Dec 20, 2023

메모리 구조 및 특성에 대해 설명해주세요 (스택, 힙 등)
BSS / 데이터 영역 -> 초기화하지 않은 변수가 초기화 되면 데이터 영역으로 넘어가나? -> O

  • 스택 : 지역 변수, 함수 매개변수를 저장하는 곳으로 높은 주소값 ~ 낮은 주소값으로 메모리를 할당합니다. 컴파일 때 영역 크기를 결정합니다.
  • 힙 : 사용자가 동적 할당한 변수, 객체를 저장하는 곳으로, 낮은 주소값 ~ 높은 주소값으로 메모리를 할당합니다. 이 때 주소 값들이 꼭 연속적인 것은 아닙니다.
  • 데이터 : 전역 변수, 정적 변수, 배열, 구조체가 저장되는 곳입니다. 초기값의 유무에 따라 BSS 또는 Data 영역에 쌓이게 됩니다.
    • BSS(Block Stated Symbol) : 초기화하지 않은 변수
    • 데이터 영역 : 초기화한 변수
    • 이 둘을 나눈 이유는, 초기화 되지 않은 변수는 영역만 잡아주면 되지만 초기화된 변수는 그 값도 저장해야하기 때문입니다.

@krrong
Copy link
Collaborator Author

krrong commented Dec 20, 2023

내부 단편화와 외부 단편화에 대해 설명해주세요

내부 단편화 : 나뉘어져 있는 메모리가 프로세스가 필요로 하는 메모리보다 커서 메모리가 남는 현상을 말합니다.

외부 단편화 : 남아있는 메모리의 크기가 실행하고자 하는 프로세스보다 크지만, 연속적이지 않은 공간에 존재하여 실행하지 못하는 현상을 말합니다.

@sujin9
Copy link
Collaborator

sujin9 commented Dec 20, 2023

해결 방법은 무엇이 있나요? (페이징, 세그먼테이션)

페이징 기법은 메모리에 연속으로 할당할 필요가 없어 외부 단편화 문제를 해결할 수 있습니다.
하지만, 프로세스의 마지막 페이지가 정해진 페이지 크기보다 작을 수 있어 내부 단편화 문제는 발생할 수 있습니다.

세그멘테이션은 프로세스가 요구하는 메모리 크기에 맞게 할당하기 때문에 내부 단편화는 일어나지 않지만,
중간에 프로세스가 메모리를 할당/해제하면서 외부 단편화 문제는 발생할 수 있습니다.

페이지드 세그먼테이션은 하나의 세그먼트가 여러 개의 페이지로 구성되도록 2개의 테이블(외부의 세그먼트 테이블, 내부의 페이지 테이블)을 사용한 기법으로, 외부 단편화 문제는 해결할 수 있으나 내부 단편화 문제는 완전히 해결하지는 못합니다.

메모리 풀은 필요한 크기의 메모리를 미리 할당받고, 필요할 때마다 사용하고 반납하는 기법으로 메모리 할당/해제가 자주 일어나는 경우에 적합합니다. 미리 할당해놓은 공간을 사용하기 때문에 할당/해제로 인한 외부 단편화가 발생하지 않고, 필요한 만큼 할당하기 때문에 내부 단편화가 생기지 않습니다. 다만 할당해놓고 사용하지 않는 공간이 메모리 단편화로 생기는 낭비량보다 큰 경우 메모리 누수가 발생합니다.

@s9hn
Copy link
Member

s9hn commented Dec 20, 2023

인터럽트에 대해 설명해주세요

  • 주변장치들은 CPU의 서비스가 필요한 경우에 신호를 발생시켜 서비스를 요청하는데, 이를 인터럽트라고 한다.
  • CPU는 평소에 CPU 스케줄링에 따라 자기에게 주어진 작업을 수행하다가, 인터럽트가 발생하면 하던 일을 잠시 멈추고 서비스를 수행한다.
  • 인터럽트는 요청하는 장치와 발생 상황에 따라 다양한 종류가 있기 때문에 운영체제는 인터럽트의 종류마다 서로 다른 인터럽트 처리루틴을 가지고 있다.
    • 인터럽트 처리루틴이란, 서로 다른 상황의 인터럽트가 발생했을 때 해주어야 할 작업을 정의한 프로그램 코드를 말한다.
    • 이는 운영체제 커널 내에 존재하는 코드로, CPU 스케줄링, 메모리 관리루틴 등 다양한 기능을 위한 커널 코드의 일부분이다.

@no1msh
Copy link
Collaborator

no1msh commented Dec 20, 2023

캐시 메모리를 사용하는 이유와 상황 및 응용

캐시메모리는 일단 CPU와 RAM의 접근속도차이를 줄이기 위해 사용됩니다.
CPU에서 RAM에 있는 데이터를 가져올 때 자주 사용하는 데이터는 캐시 메모리에 따로 저장을 하게 됩니다.
이때 캐시메모리에 CPU가 필요로하는 데이터가 있을 확률을 캐시 적중률이라고 합니다.
이 캐시 적중률을 높이기 위해선 지역성을 고려할 수 있는데,
이 지역성에는 시간 지역성과 공간 지역성이 있습니다.
시간 지역성은 가장 최근에 참조한 데이터를 다시 참조할 확률이 높으므로 해당데이터를 캐시메모리에 저장하는 것이고,
공간 지역성은 실제 참조한 주소 근처의 내용을 다시 참조할 확률이 높은걸 고려하여 캐시메모리에 데이터를 저장하는 것입니다.

@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Dec 20, 2023

시스템콜이란?

커널 모드와 사용자 모드 간에 필요한 정보를 주고받기 위해 호출 하는 함수로 시스템 콜이 호출되면 일시적으로 커널 모드로 전환됩니다.

@hyemdooly
Copy link
Collaborator

hyemdooly commented Dec 20, 2023

동시성과 병렬성의 차이는?

동시성은 컨텍스트 스위칭을 통해 여러 일을 번갈아 처리하면서 사용자 입장에서는 정말 동시에 진행되는 것처럼 보이는 것이고,
병렬성은 여러 코어에서 일을 병렬적으로 처리하는 것입니다.

@krrong
Copy link
Collaborator Author

krrong commented Dec 20, 2023

Stack overflow가 생기는 경우와 Heap overflow가 생기는 경우 예시 한가지씩

스택 오버플로우 : 많은 재귀 호출

힙 오버플로우 : 과도한 동적할당

@sujin9
Copy link
Collaborator

sujin9 commented Dec 20, 2023

여러 스레드에서 공유 자원을 접근할 때 주의점은?

데이터의 일관성이 유지되도록 주의해야 합니다.

@s9hn
Copy link
Member

s9hn commented Dec 20, 2023

synchronized 키워드를 메소드에서 쓰는 것과 block으로 사용하는 것의 차이점

synchronized 메서드에 사용하면 해당 메서드 전체에 대해 객체 락을 걸어 스레드들 간에 동기화가 이루어진다.
반면에 블록에 사용하면 특정 부분에 대해 객체 락을 걸고, 다른 부분은 동기화되지 않는다.
따라서 블록을 사용하면 더 세밀한 동기화가 가능하며, 다른 스레드와의 동시 접근을 효과적으로 제어할 수 있다.

@no1msh
Copy link
Collaborator

no1msh commented Dec 20, 2023

임계 영역 문제가 발생하지 않도록 충족해야하는 3가지 조건은?

상호배제, 진행, 한정된 대기가 있습니다.

먼저 상호배제 기법(mutual exclusive)�은 어떤 프로세스가 임계 영역에 접근 중일 때 다른 프로세스가 임계 영역에 접근하지 못하게 하는 것을 의미합니다. 대표적으로 뮤텍스와 세마포어가 있습니다.

진행은 임계영역을 실행중인 프로세스가 없을 때 다른 프로세스가 임계영역을 실행하는 것입니다.

마지막으로 한정된 대기는 임게 영역에 접근을 요청했을 때 무한한 시간을 기다리지 않아야한다는 것을 의미합니다.

@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Dec 20, 2023

싱글톤에서 발생할 수 있는 동시성 문제에 대해 설명해주세요

멀티 스레드 환경에서 동시에 접근하여 객체를 수정하거나 상태를 변경할 때 발생할 수 있는 문제가 발생합니다.
이를 해결하기 위해서 스레드의 안정성을 보장하는 방법을 사용해야합니다.

@hyemdooly
Copy link
Collaborator

hyemdooly commented Dec 20, 2023

선점형 스케줄링과 비선점형 스케줄링의 차이

비선점형 스케줄링은 실행 중인 프로세스가 종료되기 전까지 다른 프로세스를 실행할 수 없습니다. 하지만 선점형 스케줄링은 실행 중인 프로세스를 중단시키고 다른 프로세스를 실행할 수 있습니다.

@krrong
Copy link
Collaborator Author

krrong commented Dec 20, 2023

가상 메모리의 장점은?

사용자에게 실제 메모리 크기보다 더 큰 메모리가 있는 것처럼 제공합니다. 그래서 갖고 있는 메모리보다 큰 프로세스를 실행할 수도 있고, 여러 프로세스를 동시에 실행할 수도 있게 해줍니다.

@sujin9
Copy link
Collaborator

sujin9 commented Dec 20, 2023

요구 페이징(demand paging)이란?

프로세스에서 필요한 페이지만 메모리에 로드하는 방식입니다. 나머지 영역은 디스크에 저장합니다.
메모리에 필요한 페이지가 없는 경우 페이지 폴트가 발생하고, 이를 디스크에서 스왑 인하여 메모리로 로드합니다.

@s9hn
Copy link
Member

s9hn commented Dec 20, 2023

쓰레드마다 독립적으로 스택영역을 갖는 이유는?

실행흐름의 단위로써 주체가 되기위해 최소필요충분조건으로 스택. 스택에 함수호출이 있으니까 함수를호출할수잇다 -> 독립적인주체다 뭐 그런늬앙스

@no1msh
Copy link
Collaborator

no1msh commented Dec 20, 2023

데드락이 무엇인가요?

상호배제 기법으로 인하여 2개 이상의 프로세스가 각각 자원을 가지고 있으면서 서로의 자원을 요구하게되어 결국 아무것도 하지못하는 상태를 교착 상태 즉, 데드락 상태라고 합니다.

@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Dec 20, 2023

콘보이 현상(convoy effect)이란 무엇인가요?
콘보이 현상이 발생될 수 있는 CPU 스케줄러 알고리즘은 무엇인가요?

FCFS 스케줄리에서 발생하는 현상으로 CPU 버스트가 긴 프로세스 하나가 CPU 버스트가 짧은 여러 개의 프로세스보다 먼저 온 경우 평균 대기 시간이 길어지는 현상을 콘보이 현상이라고 합니다.

@hyemdooly
Copy link
Collaborator

hyemdooly commented Dec 20, 2023

인터럽트 발생 시 수행 과정을 간략히 설명해주세요.

  1. 프로세스를 실행하다가 일정 시간을 초과하는 경우 : 프로세스가 준비 큐로 들어가고 준비 상태가 됩니다.
  2. 입출력 요청이 들어오는 경우 : 프로세스는 대기 큐로 들어가서 대기 상태가 되고, 입출력이 완료되면 프로세스는 준비 큐로 들어갑니다.

@krrong
Copy link
Collaborator Author

krrong commented Dec 20, 2023

프로세스의 상태변화에 대해 설명해주세요.

생성, 준비, 대기, 실행, 완료

@sujin9
Copy link
Collaborator

sujin9 commented Dec 20, 2023

힙 영역에서 메모리 누수는 어떻게 예방할 수 있을까요?

동적 할당 해제를 잘 해줘야 합니다.
(가비지 컬렉터 짱짱)

@s9hn
Copy link
Member

s9hn commented Dec 20, 2023

multi process환경에서 process간에 데이터를 어떻게 주고 받을까요?

공유메모리와 메시지 전달 모델의 장단점을 설명해 주세요.

  1. 공유 메모리
  2. 소켓
  3. 세마포어
  4. 파이프
  5. 메시지큐
    등이 있다.

공유 메모리는 여러 프로세스에서 접근할 수 있으므로 동기화 문제가 발생할 수 있다.
메시지 전달 모델의 장점은 커널에서 관리해주기때문에 동기화문제에서 안전하지만 동시에 커널에서 관리하기에 느리다.

@no1msh
Copy link
Collaborator

no1msh commented Dec 20, 2023

thread-safe에 대해 설명해주세요.

멀티 스레드 환경에서 어떤 변수, 함수, 객체에 스레드 여러개가 한번에 접근해도 문제가 없는 환경을 의미합니다.

이를 위해서는 여러가지 조건이 있습니다.

  • 상호배제: 공유자원에 접근해야 할 때는 뮤텍스와 세마포어같은 상호배제 기법을 사용하여 접근을 통제해야 합니다.
  • 원자 연산:; 공유 자원에 접근할 때 원자 연산을 이용하거나 원자적으로 정의된 연산을 이용해 연산 도중에 다른 스레드가 접근하지 못하게 해야합니다.
  • 재진입성: 특정 함수를 하나의 스레드에서 실행 중일 때 다른 스레드가 해당 함수를 실행해도 각 스레드에 올바른 결과가 나올 수 있게 해야합니다.
  • 스레드 지역 저장소: 각 스레드에서만 접근할 수 있는 저장소를 사용해서 공유되는 자원을 줄입니다.

@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Dec 20, 2023

Round Robin 스케줄링 알고리즘을 사용할 때, Time Slice에 따른 trade-off를 설명해주세요.

Time Slice를 작게 설정하면 컨텍스트 스위칭이 빈번하게 일어나서 오버헤드가 커지는 문제가 발생하고
Time Slice를 길게 설정하면 FCFS와 같은 결과를 나타냅니다.

@hyemdooly
Copy link
Collaborator

hyemdooly commented Dec 20, 2023

시스템 콜 필요한 이유는 무엇인가요?

사용자가 직접적으로 하드웨어를 제어한다면 문제가 발생할 수 있기 때문에, 사용자는 시스템 콜을 사용하여 커널의 기능을 사용해야합니다. (도서관 사서 비유)

@krrong
Copy link
Collaborator Author

krrong commented Dec 20, 2023

프로그램은 무엇인가요?

디스크 영역에 저장되어 있는 코드를 말합니다.

@sujin9
Copy link
Collaborator

sujin9 commented Dec 20, 2023

사용자 모드에서 커널모드의 자원에 접근할 수 있는 방법이 있나요?

시스템 콜

@s9hn
Copy link
Member

s9hn commented Dec 20, 2023

외부조각으로 인해 생겨날 수 있는 문제점이 무엇인가요?

메모리 공간이 낭비됩니다.

@no1msh
Copy link
Collaborator

no1msh commented Dec 20, 2023

최악적합을 사용하는 이유는 무엇인가요?

최적 적합과 비교해서 설명드리자면, 최적 적합의 경우 분할된 공간에 제일 잘 들어맞는 공간에 프로세스를 할당합니다.
예를 들어, 10의 공간이 있는 메모리에 9의 크기를 가진 프로세스가 들어간다면 1의 크기가 낭비되게 됩니다.
이 작디 작은 1의 크기의 공간은 대부분의 프로세스가 들어가기에 작은 공간이기에 메모리 압축을 유발하게 됩니다.

최악적합으로 다시 돌아와서, 최악적합은 프로세스를 할당할 때 메모리의 제일 큰 공간에 할당합니다.
예를 들어, 2의 크기를 가진 프로세스를 10의 크기의 메모리 공간에 할당하면 8이라는 다른 프로세스를 할당할 수 있는 큰 크기의 공간이 나오게 됩니다.
때문에 최적 적합과 비교했을 때 상대적으로 적은 메모리 압축을 유발합니다.

@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Dec 20, 2023

PCB가 무엇인지 설명해주세요.

Process Control Block으로 프로세스 제어 블록이라고 합니다.
프로세스에 대한 정보를 저장하고 저장되는 정보로는 프로세스 아이디인 PID, 프로세스가 다음으로 실행해야하는 명령어의 주소 값인 PC 등이 저장되어 있습니다.

@hyemdooly
Copy link
Collaborator

hyemdooly commented Dec 20, 2023

프로세스 동기화가 무엇인지, 동기화 방법에는 무엇이 있는지 설명해주세요.

프로세스 동기화란 멀티 스레드, 멀티 프로세스 환경에서 공유 자원에 대한 접근을 조절하여 데이터의 일관성이 유지되도록 하는 것입니다.
동기화를 위해 뮤텍스, 세마포어를 사용할 수 있습니다.

@krrong
Copy link
Collaborator Author

krrong commented Dec 20, 2023

커널은 무엇인가요?

OS에서 핵심이 되는 프로그램입니다.
시스템 자원이 필요할 때 요청하여 사용할 수 있도록 도와줍니다.

@sujin9
Copy link
Collaborator

sujin9 commented Dec 20, 2023

좀비 프로세스, 고아 프로세스에 대해 설명해주세요.

좀비 프로세스란, 자식 프로세스가 종료되었지만 부모 프로세스에 의해 회수되지 않고 남겨진 경우, 이 남겨진 자식 프로세스를 의미합니다. 좀비 프로세스가 쌓이면 자원이 낭비될 수 있는데, 추후 reaper process에 의해 회수됩니다.

고아 프로세스란, 부모 프로세스가 자식 프로세스보다 먼저 종료되는 경우 남겨진 자식 프로세스를 의미합니다. 이 때, 고아 프로세스는 부모 PID가 init process의 PID인 1로 바뀌고 (init process에 입양되고), 이후 고아 프로세스의 작업이 종료되는 경우 init process에 의해 회수됩니다.

@s9hn
Copy link
Member

s9hn commented Dec 20, 2023

CPU 스케줄링 알고리즘에서 기아 상태(Starvation)란 무엇인가요?

우선순위 스케줄링에서 우선 순위가 낮아 cpu를 계속 할당받지 못하는 상태를 말한다.

@no1msh
Copy link
Collaborator

no1msh commented Dec 20, 2023

크롬 브라우저에서 한 탭에 오류가 생기더라도, 다른 탭에 영향을 끼치지 않습니다. 그렇다면 각각의 크롬 탭은 프로세스일까요? 쓰레드일까요?

프로세스와 스레드의 차이에서 크롬탭이 어떤 것인지 알 수 있습니다.
가장 대표적인 차이는 공유자원이 있냐 없냐의 차이입니다.
프로세스는 공유자원이 없고 공유를 하고싶다면 IPC를 활용해야합니다.
반면에 스레드는 스택을 제외한 힙, 데이터, 코드 영역을 공유하게 됩니다.
크롬 탭의 경우 한 탭이 이상이 생기더라도 다른 탭에 이상이 없으니 프로세스입니다.

@Choisehyeon
Copy link
Collaborator

Choisehyeon commented Dec 20, 2023

페이징과 세그먼테이션의 차이점은 무엇일까요?

페이징

  • 프로세스의 메모리 영역과 물리 메모리 영역을 일정 크기로 분할하는 방식

세그먼테이션

  • 프로세스를 논리적 단위로 분할하는 방식

분할 방식이 다르다는 차이점이 있습니다.

@hyemdooly
Copy link
Collaborator

hyemdooly commented Dec 20, 2023

스레싱이란 무엇인가요?

동시에 일정 수 이상의 프로그램을 실행했을 때 오히려 CPU 이용률이 떨어지는 상황을 의미합니다. 가상 메모리를 구현하여 다중 프로그래밍을 하면 CPU 이용률이 높아지는데, 일정 수 이상으로 다중 프로그래밍을 할 경우 페이지 폴트가 자주 일어나게 됩니다. 따라서, 디스크 영역에서 필요한 페이지를 스왑 인, 불필요한 페이지를 스왑 아웃하는 작업도 자주하게 되며 페이징이 빈번히 일어나 실질적으로 CPU 이용률이 떨어지게 됩니다.
이를 예방하기 위해 워킹 세트(working set)를 사용할 수 있는데, 이는 지역성을 기반으로 자주 사용하는 페이지를 저장해두는 것입니다. 워킹 세트를 바탕으로 자주 사용하는 페이지를 물리 메모리의 프레임에 고정하면 페이지 폴트가 빈번하게 발생하는 현상을 방지할 수 있습니다.

@krrong
Copy link
Collaborator Author

krrong commented Dec 20, 2023

MMU의 역할을 얘기해주세요.

Memory Management Unit으로 논리 주소를 물리 조소로 변환해주는 역할을 합니다. 이를 통해 메모리 보호를 할 수 있습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants