남이 읽는 CS

[운영체제 - 질문정리 III] 유저모드 커널모드, 스케줄링, 인터럽트, IPC

배발자 2022. 6. 28.
반응형

[유저모드 커널모드 - 질문 정리] 

 

 

Q. 여러 프로그램이 같은 자원에 대해 시스템 콜을 할 수 있을 거 같은데 이때 데드락이 발생할 수 있는건가요? 아니면 커널이 같은 자원에 대한 요청이 동시에 있으면 순차적으로 해결하는 등 따로 처리해주는건가요?

 

이 질문의 명확한 답변은 검색해도 나오지 않아서 제가 이해한대로 설명드릴려고 해요. 정확하지 않을 수 있으니, 참고 바랍니다!

유저모드에서 수행하고 있던 CPU는 시스템 콜이 일어나면 커널모드로 이양됩니다. 즉, 처리하던 프로세스를 내려놓고 관리실로 가는거죠. 그렇다면 다른 프로세스의 명령어를 수행할 수 없고 해당 인터럽트 관련 명령을 커널에서 진행되는거죠. 그렇다면 다른 시스템 콜에 대한 반응은 CPU가 커널에서 처리가 완료 된후 진행하던 프로세스 또는 다른 프로세스의 전환이 된 후 그때 발생하는 시스템 콜을 처리하는 루틴으로 생각됩니다.

 

 

 

Q. 커널모드 유저모드 그림에서 모드비트가 0과 1이되는 무한루프를 도는것인지와, 커널모드 유저모드 변환이 자주 일어나면 시스템에 부담이 가지는 않는지 궁금합니다!

 

프로세스와의 문맥교환을 위해 제한된 시간으로 교체작업이 이루어집니다.

다음주에 배울 예정이지만 그러한 현상을 타이머 인터럽트에 의한 건데요~ 그 인터럽트의 처리를 위해서는 유저모드에서 커널모드로 전환한 후 타이머 인터럽트 처리루틴으로 해결하고 돌아와야합니다. 그래서 커널모드 유저모드는 필수관계이며 계속해서 전환되는 작업을 수행하겠죠.

그래서 모드 비트가 0과 1로 계속 전환되는 작업이 이루어진다라고 설명을 하겠습니다.

그리고 유저모드에서 커널모드로 전환이 자주 일어나는 것보단 유저모드에서만 수행할 수 있는 작업이라면 상대적으로 봤을 때 후자가 성능적으로는 좋습니다. 하지만 모드의 전환은 계속해서 일어나기 때문에 그러한 측면에서는 감수해야 할 부분입니다.

 


 

[스케줄링 - 질문 정리 ]

 

Q. 오늘날의 운영체제가 다단계 피드백 큐로 사용된다고 하셨는데 그럼 다른 스케줄링 방식은 아예 안쓰이나요? 아니면 ‘특정 경우에는 특정 스케줄링 방식이 쓰인다’ 이런 게 있나요? 

 

모든 조건을 만족시키는 스케줄러를 만드는 것은 현실적으로 불가능합니다. 시스템의 용도에 따른 요구사항이 달라지겠죠 예를 들어, 슈퍼 컴퓨터는 CPU 이용률이 중요하며 , 개인용 컴퓨터는 응답 시간 이 중요합니다. 워크스테이션(서버, 웹 서버)는 많은 리퀘스트를 처리하는 것, 즉 처리량 이 중요합니다. 그렇기 때문에 특정 환경에서 적합한 스케줄링 방식이 도입돼야합니다.

 

 

Q. 다단계 피드백 큐의 경우, 단점같은건 뭐가있나요?

 

오버헤드가 낮다고 포스팅 하진 않아서 제목을 수정하겠습니다! 다단계 피드백 큐 단점은 큐의 수, 각 큐에 대한 알고리즘, 우선순위 격상 또는 격하 시기 결정, 처음 프로세스들이 진입해야 할 큐 등등 매우 복잡한 판단을 요구합니다.

하지만 피드백 큐를 사용하는 이유는 큐 사이에 프로세스들이 이동할 수 있기 때문에 유연합니다. 또한, 피드백 큐에서도 우선순위가 높은 프로세스들이 계속해서 들어온다면 우선순위가 낮은 프로세스들은 cpu를 할당 못받을 수 있지만 여기서도 aging기법을 이용해서 프로세스를 상위 큐로 이동시킴으로써 기아 현상을 예방할 수 있습니다.

 

 

Q. 다단계 피드백 큐가 가장 효율적인 스케줄링인가요? 만약 그렇다면 더 효과적인 스케줄링은 나오지않을까여?

 

대부분의 프로세스들의 CPU 버스트를 분석해 보면 대부분 짧은 CPU 버스트를 가지며 극히 일부분만 긴 CPU 버스트를 가집니다. 이는 다시 말해 CPU를 한 번에 오래 사용하기 보다는 잠깐 사용하고 I/O 작업을 수행하는 프로세스들이 많다는 뜻입니다. 따라서 CPU 스케줄링을 할 때는 CPU 버스트가 짧은 프로세스들에게 우선적으로 CPU를 사용할 수 있도록 하는 스케줄링이 필요합니다. 이는 바꾸어 말하면 스케줄링 시 I/O 바운드 프로세스에게 우선순위를 높여주는 것이 바람직하다는 의미가 됩니다. 하지만 CPU 버스트가 긴 프로세스에서도 우선권을 언젠가는 줘야하기 때문에 대부분의 OS에서 활용하는 스케줄링 방식이라고 한 겁니다! I/O 작업을 거의 수행하지 않고 CPU 버스트가 길게 나타나는 계산 위주의 프로그램 같은 경우에는 비선점형 방식이 더 효율적일 수 있습니다.

 

 

Q. 라운드 로빈 스케줄링에서 CPU를 사용할 수 있는 최대시간을 time quantum이라고 하셨는데 적당한 시간으로 책정을 어떻게 하는지 궁금합니다.

 

일반적으로 할당시간을 수십 밀리초 정도의 규모로 설정하게 됩니다. 이는 여러 프로세스가 동시에 수행되는 환경에서 CPU를 할당받기까지 지나치게 오래 기다리지 않을 정도의 시간 규모에 해당해요. 1밀리초는 0.001초에 해당합니다

 

 


 

[인터럽트 - 질문 정리]

 

Q. 여러가지 인터럽트가 동시에 들어오면 순차적으로 처리 되나요? 아니면 우선순위가 있나요? 

 

여러 장치에서 인터럽트가 동시에 발생하거나 인터럽트 서비스 루틴 수행 중 인터럽트가 발생했을 경우 우선순위를 따져서 처리합니다~

 

  1. 전원이상
  2. 기계 착오
  3. 외부 신호
  4. 입출력
  5. 명령어 잘못
  6. 프로그램 검사
  7. svc

 

일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선순위가 높고 내부 인터럽트 보다 외부 인터럽트가 우선순위가 높은것을 알 수 있습니다.

 

 

Q. 컴퓨터에는 전원이 꺼지면 인터럽트가 전원 이상 인터럽트로 인해 신호를 걸어주는데 필요한 예비전력 같은게 있는건가요?

 

전원이상 인터럽트에 대한 자세한 내용은 구글링해도 나와있진 않지만 현재 수행중인 중요한 작업을 대피시키기 위해서는 최소한의 예비전력을 남겨놓을 겁니다!

 


 

[IPC - 질문 정리]

 

Q. IPC 모델에 메세지 전달방식과 공유메모리방식이 있는데 두 방식은 각각 언제 쓰이나요?

 

공유 메모리 같은 경우에는 프로세스 간에 공유가 되도록 설정해놓은 메모리이며, 모든 프로세스들이 접근이 가능합니다. 처음 생성할 때만 시스템콜을 사용하기 때문에 속도가 빨라요. 그래서 많은 양의 데이터를 전달하는 경우에 많이 사용합니다. 하지만 동기화 문제를 생각해야겠죠?

 

메세지 전달 방식은 공유자원을 그때그때 프로세스사이에서 전달하는 방식이에요. 이러한 방법의 장점은 동기화를 전혀 고민할 필요가 없어서 구현하기가 편하다는 거죠. 그치만 공유메모리에 비해 속도가 느립니다. 그래서 메세지 패싱 방식은 동기화를 신경쓰지않고 적은 양의 데이터를 전달할 때 쓰입니다.

 

 

Q. 메시지 패싱과 공유메모리 방식말고 다른 IPC 모델도 존재하나요?

 

해당 포스팅에서는 메세지 패싱 모델과 공유 메모리 모델의 흐름을 설명을 하였고 해당 모델에서는 주요기법이 존재합니다. 메세지 패싱 모델에서의 주요 기법은 PIPE, FIFO, 메시지 큐, 소켓, 세마포어가 존재하구요. 공유 메모리 모델에서의 기법은 말 그대로 공유 메모리가 쓰입니다. 

 
 
반응형

댓글