Skip to content

Latest commit

 

History

History
79 lines (53 loc) · 6.9 KB

operatingsystem.md

File metadata and controls

79 lines (53 loc) · 6.9 KB

Operating System

Questions

Answers

#1

KeyWord : 자원공유

프로세스는 운영체제로 부터 시스템 자원을 할당받은 작업의 단위 로, 각 프로세스는 각각 독립된 메모리 영역을 할당 받습니다. 하지만, 스레드는 프로세스가 할당받은 자원을 이용하는 실행(흐름)의 단위 로, 프로세스 내 하나 이상 존재하며, stack 메모리 영역외의 다른 메모리 영역(data, code, heap)을 다른 스레드와 공유합니다.

더 나아가 각 프로세스는 별도의 주소 공간에서 실행되어서 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없기에, 한 프로세스가 다른 프로세스의 자원에 접근하려면 IPC(inter-process-communication)를 사용해야 합니다.

#2

KeyWord : Context switching 오버헤드

프로세스 사이에는 공유하는 메모리가 없기에 Context Switching 이 발생하면, 이 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 됩니다. 또 프로세스는 각각의 독립된 메모리 영역을 할당 받았기 때문에, 한 프로세스가 다른 프로세스의 자원에 접근하기 위해서는 복잡하고 어려운 통신 기법(IPC)를 사용해야 한다는 단점이 있습니다. 따라서 멀티 스레드가 멀티 프로세스 보다 자원을 더 효율적으로 관리 할 수 있고, 처리 비용 및 응답시간을 단축 시킬 수 있기에 멀티 스레드를 사용합니다.

멀티 프로세스

하나의 응용 프로그램을 여러개의 프로세스로 구성하여, 각 프로세스가 하나의 작업을 처리하는 것

  • 장점 : 독립된 구조이므로 하나의 프로세스가 잘못되어도 프로그램은 작동함
  • 단점 : Context Switching에서의 오버헤드 발생

멀티 스레드

프로그램을 여러개의 스레드로 구성하고, 각 스레드가 작업을 처리하는 것

  • 장점 : 시스템 자원 소모 감소, 처리비용 감소, 스레드간 자원 공유하므로 통신의 부담이 적음
  • 단점 : 디버깅이 어려움, 동기화 이슈 발생 , 하나의 스레드의 오류로 전체 프로세스에 문제가 생길 수 있음

참고 ) https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4

#3

KeyWord : 데이터 지역성, 적중률

캐시의 지역성이란, 적중율을 높이기 위해 시간/공간적으로 가까운 데이터에 집중적으로 참조하는 성질인 데이터 지역성을 이용하는 것입니다.

캐시메모리는 속도가 빠른 장치와 느린 장치간의 속도 차에 따른 병목 현상을 줄이기 위한 범용 메모리입니다. 이러한 역할을 수행하기 위해선 CPU가 어떤 데이터를 원할 것인가를 어느 정도 예측할 수 있어야 합니다. 따라서 이때, 적중률(cache hit rate)을 극대화 시키기 위해서 데이터 지역성(Locality)의 원리를 사용합니다. 데이터 지역성의 전제 조건은 프로그램은 모든 코드나 데이터를 균등하게 access하지 않고, 어느 한 순간에 특정 부분을 집중적으로 참조한다는 것입니다. 데이터 지역성은 대표적으로 시간 지역성과 공간지역성, 순차적 지역성으로 나뉘게 됩니다.

  • 시간 지역성: 최근에 참조된 주소의 내용은 곧 다음에 다시 참조되는 특성
  • 공간 지역성: 대부분의 실제 프로그램이 참조된 주소와 인접한 주소의 내용이 다시 참조되는 특성
  • 순차적 지역성 : 분기가 발생하지 않는 한 명령어는 메모리에 저장된 순서대로 실행/인출되는 특성

부가적으로 적중율에 대해서 설명하자면, 캐시 메모리가 있는 컴퓨터 시스템은 CPU가 메모리에 접근하기 전 먼저 캐시 메모리에서 원하는 데이터의 존재 여부를 확인하는데, 이때 필요한 데이터가 있는 경우를 적중(hit), 없는 경우를 실패(miss)라고 합니다. 여기서 요청한 데이터를 캐시 메모리에서 찾을 확률을 적중률(hit rate)이라고 하고, 캐시 메모리의 성능은 적중률에 의해 결정됩니다.

#4

KeyWord : 멀티 스레드 프로그램, 임계 영역, 동기화 기법

스레드 안전(thread safety)은 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 수행 결과가 올바르게 나오고, 프로그램의 실행에 문제가 없는 것을 말합니다. Thread-safe하기 위해서는 공유 자원에 접근하는 임계영역(critical section)을 동기화 기법으로 잘 제어해주어야 합니다.

Thread-safe를 지키기 위한 방법들

  1. Re-entrancy thread에서 동작하는 코드가 동일 thread에서 재수행되거나, 다른 thread에서 해당 코드를 동시에 수행해도 동일한 결과값을 얻을 수 있도록 코드를 작성합니다.

  2. Thread-local storage 특정 thread에만 접근 가능한 저장소를 만듭니다. 공유 자원의 사용을 최대한 줄여 각각의 특정 스레드에서만 접근 가능한 저장소들을 사용함으로써 동시 접근을 막는다. 이 방식은 동기화 방법과 관련되어 있고, 또한 공유상태를 피할 수 없을 때 사용하는 방식이다.

  3. Mutual exclusion ⇒ 통상적으로 Mutual Exclusion(상호배제) 방식을 이용한 Critical Section 처리가 자주 사용되는 편 공유 자원을 꼭 사용해야 할 경우 해당 자원의 접근을 세마포어 등의 lock으로 하나의 thread만 접근 가능하게 통제한다. 여기서 임계영역이란 멀티 스레드에 의해 공유자원이 서로 참조될 수 있는 코드의 범위를 말하고, 멀티 스레드 프로그램에서 임계영역을 제대로 처리하지 못하는 경우 심각한 문제가 발생할 수 있기 때문에, **동기화 기법(MUtex, Semaphore)**으로 이 문제를 해결합니다.

  4. Atomic operations 공유 자원에 접근할 때 원자 연산을 이용하거나 '원자적'으로 정의된 접근 방법을 사용함으로써 상호 배제를 구현할 수 있다.

  5. Immutable Object 객체 생성 이후에 값을 변경할 수 없도록 만듭니다.

#5

#6