[4회차] 운영체제 모의면접 스터디 대비

cosmos-JJ·2023년 10월 6일
0

CS 스터디

목록 보기
5/6
post-thumbnail

❓ 병행성(동시성)에 대해 설명해주세요.

💭 병행성은 한 개의 CPU가 다수의 프로세스들을 서로 번갈아 가면 수행하여 동시에 작업이 실행되는 것처럼 느끼게 해주는 것입니다. 컴퓨터에서 자주 쓰이는 변수나 함수는 모든 프로세스들이 접근 가능한 전역 메모리에 적재하여 공유되는데 병행성으로 인하여 프로세스간 메모리 공유는 문제를 야기할 수 있습니다.


❓ 병렬성에 대해 설명해주세요.

💭 병행성과 다르게 병렬성은 실제로 동시에 작업이 처리되는 것입니다. 보통 멀티 코어에서 멀티 쓰레드를 동작시키는 방식이며 한번에 많은 일을 처리할 수 있기 때문에 병렬처리를 이용하여 이미지나 비디오를 인코딩하거나, 대규모 데이터를 처리하는 등의 실행 시간을 줄이거나 처리량을 늘리는 데에 사용됩니다.


❓ 프로세스 동기화에 대해 설명해 주세요.

💭 Concurrency Control(병행 제어)라고 부르기도 하며, 여러 프로세스 또는 스레드가 동시에 실행해도 공유 데이터의 일관성을 유지하는 것을 말합니다. 이 뜻은 프로세스나 스레드 사이의 수행 시기를 맞추는 것을 의미하는 데 수행 시기를 맞춘다는 것은 첫번쨰로 프로세스를 올바른 순서대로 실행하는 것이며(실행 순서 제어) 두번째는 동시에 접근해서는 안되는 자원에 프로세스만 접근하게 하는것입니다.(상호배제)


❓ Critical Section에 대해 설명해주세요.

💭 Critical Section은 공유 데이터의 일관성을 보장하기 위해 하나의 프로세스 또는 스레드만 진입해서 실행 가능한 영역입니다.


❓ Race Condition이 무엇인가요?

💭 여러 프로세스가 동시에 같은 데이터를 조작할 때 타이밍이나 접근 순서에 따라 결과가 달라질 수 있는 상황입니다. 공유 데이터의 최종 연산 결과는 마지막에 공유 데이터를 다룬 프로세스가 누구인지에 따라 달라지며 Race Condition을 막기 위해선 공유 데이터에 대한 동시 접근을 동기화 해야합니다.


❓ Race Condition을 어떻게 해결할 수 있나요?

💭 Semaphore(세마포어)와 Mutex(뮤텍스)로 Race Condition을 예방할 수 있습니다.


❓ Mutual Exclusion에 대해 설명해주세요.

💭 특정 한 시점에 단 하나의 프로세스만이 Critical section에 접근할 수 있는 것으로 공유가 불가능한 자원의 동시 사용을 피하기 위해 사용하는 알고리즘입니다.


❓ Mutual Exclusion을 할 수 있는 방법은?

💭 (잘 모르겠습니다...!)

  • SW solutions
    • Dekker’s algorithm (Peterson’s algorithm)
    • Dijkstra’s algorithm, Knuth’s algorithm, Eisenberg and McGuire’s algorithm, Lamport’salgorithm
  • HW solution
    • TestAndSet(TAS) instruction
  • OS supported SW solution
    • Spinlock
    • Semaphore
    • Eventcount/sequencer
  • Language-Level solution
    • Monitor

❓ 뮤텍스(Mutex)에 대해 설명해주세요.

💭 뮤텍스는 공유 자원에 대해 lock와 unlock을 함으로써 상호배제를 보장하는 기법입니다.


❓ 세마포어에 대해 설명해주세요.

💭 뮤텍스와 비슷하지만, 좀 더 일반화된 방식의 동기화 도구입니다. Mutex는 하나의 공유 자원에 접근하는 프로세스를 상정한 방식이지만 Semaphore는 공유 자원이 여러 개 일때 접근하는 프로세스를 상정한 방식입니다. 세마포어의 종류는 이진 세마포와 카운팅 세마포가 있습니다.


❓ 뮤텍스(Mutex)와 이진 세마포어의 차이에 대해 설명해주세요.

💭 - 뮤텍스에서는 lock을 설정한 프로세스만이 unlock을 할 수 있다. 하지만 이진 세마포어에서는 lock을 설정한 프로세스와 unlock을 하는 프로세스가 서로 다를 수 있다.


❓ 모니터에 대해 설명해주세요.

💭 프로세스 또는 스레드를 동기화하는 방법 중 하나로서 사용자가 사용하기에 세마포어보다 훨씬 편리한 도구입니다. 모니터는 공유자원과 공유 자원에 접근하기 위한 인터페이스를 묶어서 관리하며 프로세스는 반드시 인터페이스를 통해서만 공유 자원에 접근하도록 해야합니다. 모니터는 모니터는 모니터에 진입하기 위한 큐를 만들고, 모니터 안에 항상 하나의 프로세스만 들어오도록 하여 상호 배제를 위한 동기화 제공하고 모니터는 조건 변수를 이용하여 프로세스 실행 순서 제어를 위한 동기화를 제공합니다.


❓ 데드락이 무엇인가요?

💭 두 개 이상의 프로세스 혹은 스레드가 서로가 가진 리소스를 기다리는 상태입니다.


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

💭 리소스를 공유해서 사용할 수 없다는 상호 배제 , 프로세스가 이미 하나 이상의 리소스를 취득한 상태에서 다른 프로세스가 사용하고 있는 리소스를 추가로 기다리는 점유와 대기, 리소스 반환은 오직 그 리소스를 취득한 프로세스만 할 수 있다는 비선점, 프로세스들이 순환형태로 서로의 리소스를 기다리는 원형 대기가 있습니다.


❓ 데드락 회피 방법은 무엇이 있나요?

💭 데드락 회피 방법에는 은행원 알고리즘이 있습니다. 은행원 알고리즘은 프로세스가 시작시 자신이 필요한 자원의 최대 개수를 미리 선언하고 각 프로세스에서 자원요청이 있을때 시스템이 안전한 상태라고 유지되는 경우에만 자원을 할당합니다. 그렇지 않은 불안정 상태가 예상되면 다른 프로세스가 자원을 반환할 때 까지 대기하는 알고리즘 입니다.


❓ 최근에 관심가지고 있는 기술에 대해서 설명해주세요.

💭 최근에 Linux에 관심이 있어 공부하고 있습니다. 리눅스는 컴퓨터 운영체제 중 하나로 오픈소스 프로그램이며, 리눅스는 다중작업이 가능하고 CLI 기반이라는 특징이 있습니다. 또한 리눅스는 우분투, 페도라, 레드햇, 센트오에스 등 여러 종류로 나누어져 있습니다.


❓ 기술을 어떤식으로 학습 하는지 설명해주세요.

💭 저는 강의나 책 또는 공식 문서를 보며 기술을 이해하고 문법을 학습합니다. 문법을 학습하면서 실제로 간단하게 구현해보고 그 과정을 블로그에 기록하며 복습합니다. 이론을 공부한 후 스터디나 프로젝트 등 함께모여서 공부할 수 있는 환경을 만들어 제가 잘못이해한 부분이나 다른 방식으로는 어떻게 접근할 수 있는지 학습합니다.


❓ 안정적인 시스템을 개발하는 팀에서 꼭 지켜야할 개발 프로세스는 뭐라고 생각하시나요?

💭 저는 사용자 피드백이라고 생각합니다. 시스템을 개발하기 위해서 개발자는 많은 노력을 기울이고 수많은 테스트를 거치지만 결국 시스템은 배포를 거쳐 사용자가 사용하게 되고 개발하며 생각하지 못했던 문제점들이 나타나게 됩니다. 그래서 안정적으로 시스템을 개발하기 위해서 꼭 지켜야 할 것은 최종적으로 시스템을 사용하는 사용자의 피드백을 수집하고 고려하여 시스템을 지속적으로 개선하는 프로세스를 꼭 지켜야 한다고 생각합니다.


추가 질문

❓ Process Synchronization 문제를 풀기 위한 조건

💭 mutual exclusion (상호 배제) / progress (진행) /bounded waiting (유한 대기)/동일 속도


❓ race condition이 발생하는 예를 하나만 설명해주세요

💭


❓ Busy wating(Spin-Lock)으로 구현한 Semaphores 와 Sleep-Lock 으로 구현한 Semaphores 중 어느 것이 더 좋나요?

💭 일반적으로는 Sleep-Lock 으로 구현한 세마포어가 더 좋다.
하지만 임계구역의 길이가 매우 짧은 경우는 Sleep-Lock 오버헤드가 busy-wait 오버헤드보다 클 수 있다.

profile
🤍도전하는 건 즐거워요🤍

0개의 댓글