출처 : https://csg1353.tistory.com/69
면접 예상 질문
1. 운영체제는 무엇이고 어떤 역할을 수행하는지 설명해주세요.
답변
- 운영체제는 컴퓨터 시스템이 동작할 때, 이들 자원을 적절하게 사용할 수 있는 방법을 제공한다.
이는 현대의 정부와 유사하다. 정부 자체로는 유용한 기능을 제공하지 않지만, 유용한 작업을 할 수 있는 환경을 만드는 것이다.
- 역할 1. 메모리 자원을 관리한다.
실행할 프로그램을 메모리에 적재하고, 실행되지 않는 프로그램을 메모리에서 삭제한다.
- 역할 2. CPU 자원을 할당하여 프로그램들이 올바르게 실행되도록 관리한다.
이는 메모리에 적재되어 실행중인 프로세스를 관리하기 위해 CPU 스케줄링 알고리즘 등을 사용하여 최대한 많은 프로세스들이 공정하게 자원을 이용할 수 있도록 하는 것이다.
- 역할 3. 파일 시스템 관리를 수행한다.
파일의 생성, 삭제 등 보조기억장치의 데이터를 파일과 디렉토리로 관리한다.
추가 내용
- 운영체제 역시도 특별한 권한을 가지고 있으나, 프로그램이기에 따라서 컴퓨터에 부팅될 때 '커널 영역'인 메모리에 따로 적재되어 실행된다.
사용자 영역과 별개되는 운영체제의 커널 영역
마치 정부와 같이 자원을 배분하고, 프로그램의 실행 규칙을 만들어 시스템에 배분한다.
2. 시분할 시스템에 대해서 설명해주세요.
답변
1. 시분할 시스템은 여러 사용자가 동시에 컴퓨터 자원을 사용할 수 있게 해주는 운영체제의 시스템이다.
CPU는 한 번에 한가지의 일밖에 할 수 없지만, CPU 전체 사용 시간을 작은 단위(타임 슬라이스나, 퀀텀 등)으로 쪼개서 번갈아가며 여러 작업을 동시에 수행할 수 있게 된다.
2. 시분할 시스템은 여러 사용자 또는 여러 작업이 동시에 실행되는 환경에서 각각에게 공평한 CPU 시간을 할당하여 빠른 응답 시간을 보장하는 데 목적을 둔다. (타임 슬라이스)
추가 내용
시분할 시스템의 도식도
시분할 시스템은 현대 시스템의 대부분을 차지하며, 다음과 같은 특징을 지닌다.
여기서 말하는 사용자는 실제 사용자를 의미하기도 하지만, 프로세스도 같은 개념으로 생각될 수도 있다.
1. 다중 사용자 지원: 여러 사용자가 동시에 컴퓨터에 접근하여 각자의 작업을 수행할 수 있다.
2. 시간 할당: CPU 시간이 작은 단위로 분할되어 작업에 할당되고, 작업 스케줄러가 이를 관리한다.
3. 적응성: 시스템은 사용자의 요구에 따라 자원을 할당하고 우선순위를 조정할 수 있다.
4. 대화형 사용: 사용자는 시스템과 상호 작용하며 즉각적인 응답을 받을 수 있다.
5. 자원 공유: 메모리, 저장 공간, 프린팅 서비스 등의 자원이 여러 사용자에게 공유될 수 있다.
3. 다중 프로그래밍 시스템(multi-programming system)에 대해서 설명해주세요.
답변
다중 프로그래밍 시스템은 여러 프로그램이 메모리에 동시에 존재하고, 운영체제의 관리 하에 동작하는 시스템이다.
이 과정에서 프로세스가 대기 중이거나 CPU를 사용하지 않는 상태일 때, CPU가 효율적으로 동작하도록 '스케줄링 기법' 등을 통해 다른 프로세스에게 CPU를 할당한다.
추가 내용
사진 설명을 입력하세요.
<다중 프로그래밍 시스템의 특성>
다중 프로그래밍 시스템은 2번의 내용인 시분할 시스템과도 관련성이 있다.
시분할 시스템은 다중 프로그래밍 시스템의 개념을 확장하여 사용자에게 컴퓨터가 실시간으로 반응하는 것처럼 느껴지게 하는 시스템이다.
각 프로그램에 일정 시간을 할당하고, 그 시간이 지나면 다음 프로그램으로 넘어가는 방식으로 동작한다.
출처 입력
두 개념 모두 효율적인 자원 활용(CPU 성능을 최대한 끌어내기..)을 통해 시스템의 생산성을 높이는 것을 목표로 한다.
1. 여러 프로그램 중 어떤 프로그램을 선택할지는 '스케줄링'을 통해 해결한다. 이는 적절한 정책을 통해 다음 프로그램을 결정해준다.
2. 하나의 프로세스가 대기 상태에 있을 때, 즉 I/O 작업과 같은 CPU를 사용하지 않는 작업을 수행할 때, 운영체제는 CPU가 유휴 상태에 있지 않도록 다른 프로세스에게 CPU를 할당한다.
3. 이런 방식으로 CPU는 거의 항상 작업을 처리하고 있으며, 이는 전체적인 시스템 처리량(throughput)을 증가시킨다.
4. 다중 프로그래밍은 시스템의 자원을 효과적으로 사용하기 위해 메모리 관리, 작업 스케줄링, 입출력 관리 등의 복잡한 운영체제 기능을 필요로 한다.
<시분할 시스템과의 차이?>
- 다중 프로그래밍 방식
메모리에 여러 프로세스를 올려두고, CPU가 쉬는 상태일 때(예를 들어 한 프로세스가 입출력 작업을 기다리는 동안) 다른 프로세스가 CPU를 사용하도록 하는 방식이다. 이는 CPU 사용률을 극대화하는 데 중점을 둔다.
- 시분할 시스템
프로세스에게 일정한 시간(타임 슬라이스)을 할당하고, 이 시간이 지나면 다음 프로세스로 전환하여 CPU를 할당하는 방식이다. 이는 사용자와의 상호작용에 중점을 둔다. 사용자가 많을 때 각각의 사용자가 컴퓨터를 독점하고 있는 것처럼 느낄 수 있게 한다.
4. 대화형 시스템(interactive system)에 대해서 설명해주세요.
답변
대화형 시스템은 사용자가 컴퓨터와 상호작용하는 시스템을 말한다.
초기 컴퓨터의 일괄 배치 프로그램은 한번 입력 후 출력까지 중간 상태를 확인할 수 없었다.
하지만 IO 디바이스(키보드, 모니터) 개념이 탄생하면서, 작업 중간 입력을 하거나, 중간 결과를 확인할 수 있게 되었다.
이처럼 작업 중간에 소통이 가능한 시스템을 대화형 시스템이라고 한다.
추가 내용
대화형 시스템의 중요한 특징은 사용자의 요구에 따라 즉시 처리를 수행하고, 사용자가 시스템과 '대화'할 수 있도록 한다는 점이다. 이는 명령 줄 인터페이스(CLI)나 그래픽 사용자 인터페이스(GUI)를 통해 구현될 수 있다. 예를 들어, 텍스트 에디터를 사용할 때 사용자가 텍스트를 입력하고, 편집하고, 저장하는 모든 동작은 대화형 시스템이라고 할 수 있다.
<대화형 시스템의 특징>
1. 즉각적인 응답: 사용자의 입력에 대해 실시간으로 반응한다.
2. 양방향 통신: 사용자와 시스템 간의 지속적인 상호작용을 지원한다.
3. 사용자 인터페이스: 사용자 친화적인 인터페이스를 통해 비전문가도 쉽게 사용할 수 있다.
4. 동적 상호작용: 사용자의 입력에 따라 동적으로 내용이나 응답을 변경한다.
5. 다중 처리기 시스템(multi-processor system)에 대해서 설명해주세요.
답변
다중 처리기 시스템은 여러 개의 프로세서가 연결되어 동시에 여러 작업을 수행할 수 있는 컴퓨팅 시스템이다. 이 시스템에서는 여러 프로세서가 메모리, 입출력 장치 및 기타 자원을 공유할 수 있다.
이는 마이크로프로세서의 등장(여러 개의 프로세스 사용 가능), 공유기억장치로 다중처리기 제어 및 공유 가능 등의 배경이 있다.
추가 내용
흔히 상용화된 멀티코어 CPU 등이 다중 처리 시스템의 대표적인 예시라고 할 수 있다.
출처 입력
<다중 처리 시스템의 장점>
1. 병렬 처리: 여러 프로세서가 동시에 다른 작업을 수행하므로, 전체 시스템의 처리 능력이 증가한다.
2. 신뢰성: 한 프로세서에 문제가 생겨도 시스템 전체가 다운되지 않고, 다른 프로세서가 작업을 계속 수행할 수 있다.
3. 확장성: 시스템의 성능을 향상시키고자 할 때, 프로세서를 추가하는 것으로 쉽게 확장할 수 있다.
<다중 처리 시스템 종류>
오늘날의 시스템은 SMP(대칭형 다중 처리)를 선호하는데, 모든 프로세서가 동등하고 작업을 균등하게 분배할 수 있기 때문이다.
(마스터 프로세스가 고장난다면 바로 문제가 생길 것이다.)
멀티 프로세서의 도식도
1. 대칭형 다중 처리(Symmetric Multiprocessing, SMP)
모든 프로세서가 동등한 역할을 하며, 모든 프로세서가 메모리와 자원을 공유한다. 운영체제는 모든 프로세서에 작업을 균등하게 할당한다.
2. 비대칭형 다중 처리(Asymmetric Multiprocessing, AMP)
프로세서마다 역할이 다르다. 일반적으로 하나의 주 프로세서가 시스템을 제어하고, 나머지 프로세서는 정의된 작업만을 수행한다.
마스터 프로세서의 역할은 전통적인 CPU의 역할과 유사하다고 볼 수 있다. 그러나 AMP 시스템 내에서의 마스터 프로세서는 다음과 같은 특별한 기능을 수행한다.
- 작업 스케줄링: 다른 프로세서에게 실행할 작업을 할당한다.
- 자원 관리: 메모리, 입출력 장치 등 시스템 자원의 관리를 총괄한다.
- 인터프로세스 통신: 프로세서 간의 데이터 교환과 메시지 전달을 관리한다.
3. 대량 병렬 처리(Massively Parallel Processing, MPP)
수백 또는 수천 개의 프로세서가 각자 독립적인 작업을 수행한다. 이러한 시스템은 대규모 데이터베이스, 복잡한 과학적 계산 등에 사용된다.
6. 시스템 콜에 대해 설명해주세요.
답변
1. 프로세스가 특정한 권한을 얻기 위한 커널 모드로 진입하기 위해 운영체제에게 요청을 보내는 것을 시스템 콜이라고 한다.
2. 응용프로그램은 이러한 시스템 콜을 통해서만 자원에 접근할 수 있고, OS가 제공하는 인터페이스이자, 소프트웨어 인터럽트가 시스템 콜이다.
추가 내용
시스템 호출을 그림으로 나타낸 것.
보통 응용프로그램은 직접적으로 시스템 콜을 직접적으로 사용하지 않고, OS가 제공하는 API를 사용해서 호출하게 된다.
시스템 콜의 예시로는 다음과 같다.
1. 프로세스 제어: 프로세스 생성, 종료, 중지 등 프로세스의 생명주기를 관리한다.
ex: fork(), exit(), wait()
2. 파일 조작: 파일 생성, 삭제, 읽기, 쓰기 등 파일 시스템 관련 작업을 수행한다.
ex: open(), read(), write(), close()
3. 장치 관리: 특정 장치에 대한 제어 및 데이터 전송을 관리한다.
ex: ioctl(), write()
4. 정보 유지: 시스템 데이터의 조회 및 설정을 위한 시스템 콜이다.
ex: gettimeofday(), settimeofday()
5. 통신: 프로세스 간 통신(IPC)이나 네트워크 통신을 위해 사용한다.
ex: socket(), send(), receive()
6. 보안: 파일이나 리소스에 대한 접근 권한을 확인하거나 설정한다.
ex: chmod(), umask()
< 소프트웨어 인터럽트 >
또한 시스템 콜은 소프트웨어 인터럽트기도 하다.
따라서 시스템 콜이 요청되는 순간 커널모드에서 동작이 끝날때까지 동작이 유보되며(인터럽트가 발생하며), 서비스 루틴이 수행되고 동작이 끝난 다음 다시 수행된다.
시스템 콜의 동작 예시
하드웨어에 데이터를 저장하는 로직을 예시로 들어 보자.
1. 응용프로그램은 시스템 콜을 통해(1) 하드 디스크에 데이터를 저장하는 시스템 콜을 호출하여 커널 모드로 전환한다.
이 과정에서 동작 중인 프로세스는 일시 중지된다. (인터럽트 발생)
2. 운영체제 내의 '하드 디스크에 데이터를 저장하는 코드' 를 실행한다(소프트웨어 인터럽트 해결). 이 과정에서 IO 작업 등 데이터 저장과 관련된 로직이 실행된다.
3. 인터럽트가 끝날 경우 커널과 연결이 해제되고, 다시 사용자 모드로 복귀해서 이전 프로세스의 동작을 이어나간다.
인터럽트(시스템 콜)가 발생한 순간, 프로세스의 현재 상태는 PCB 블록에 저장된다.
출처 입력
프로세스의 흐름도.
Q. 의문점 : 인터럽트 중, 프로세스 스케줄링 과정이 발생한다면?
시스템 콜 등으로 인터럽트가 발생했을때, 동작 도중 스케줄링에 의해 프로세스 교체 과정이 일어난다고 가정한다면 ISR이 다 끝난 다음 프로세스 교환이 일어날까, 아니면 PCB등에 데이터를 저장하고 이후에 동작할까?
A.
ISR은 일반적으로 매우 빠르게 실행되도록 설계되어 있어 시스템의 응답 시간을 최소화합니다.
그리고 대부분의 운영체제에서는 인터럽트가 발생하면 현재 실행 중인 프로세스가 무엇이든 일시 중지하고 ISR을 우선 처리합니다. 따라서 ISR은 CPU랑 별개로 동작하지 않으며, ISR 실행 중에는 다른 프로세스로의 전환은 일반적으로 발생하지 않습니다. ISR 처리가 끝난 후에 프로세스 스케줄링이 이루어질 수 있습니다.
혹은, 시스템 스택과 관련이 있다고 한다.
인터럽트 I가 프로세스 A에서 발생했고, I의 로직 처리 중 문맥 교환이 발생하여 프로세스 B가 CPU를 점유하게 된 경우에 대한 예시는 다음과 같다:
1. 프로세스 A가 실행 중일 때 인터럽트 I가 발생한다.
2. 시스템은 프로세스 A의 상태를 PCB에 저장하고, 인터럽트 서비스 루틴(ISR) I를 처리하기 시작한다.
3. ISR I가 처리되는 중에 시스템은 더 우선순위가 높은 작업이 필요하다고 판단하고, 문맥 교환을 진행한다.
4. ISR I의 상태(현재까지의 진행 상황)는 시스템 스택에 저장된다.
5. 프로세스 B의 상태를 PCB로부터 CPU에 로드하여 실행을 시작한다.
6. 이후 ISR I가 완료되면 시스템은 ISR I를 처리하기 위해 다시 시스템 스택에 저장된 ISR I의 상태를 복원한다.
7. ISR I의 처리가 완료되면, 시스템은 프로세스 A의 상태를 PCB로부터 다시 CPU에 로드하여, 인터럽트 발생 전의 상태로 복귀하고 실행을 재개한다.
이 과정에서 중요한 것은 ISR의 처리 상태와 프로세스 A 및 B의 상태가 각각 독립적으로 관리되어, 인터럽트 로직과 프로세스 간의 전환에 따른 상태 변화가 서로 간섭하지 않도록 한다는 점이다.
7. 커널에 대해 설명해주세요.
답변
1. 커널은 소프트웨어(프로그램)의 한 부분이다.
운영체제의 핵심적인 부분으로 하드웨어와 소프트웨어 사이에서 통신을 중재하고, 시스템의 중요한 부분들을 관리한다.
2. 커널의 중요 기능들은 '프로세스 관리 및 CPU 스케줄링', '메모리 관리', 'I/O 디바이스 관리', 네트워크, 파일시스템 등 운영체제에 필요한 핵심 로직들과 같다.
추가 내용
- 운영체제는 규모가 큰 프로그램이고, 이 중 핵심 영역을 커널이라고 한다.
운영체제의 핵심 기능 중 일부를 커널이라고 한다.
커널 내부의 도식도
<커널의 구조>
단일 커널 : 초창기 커널은 단일형 구조 커널이었다고 한다.
이는 상대적으로 통신 비용이 저렴했지만, 모듈화가 되어있지 않고 하나의 결함이 모든 시스템 에러를 일으키는 모듈화가 되지 않은 단점을 가지고 있다.
단일형 커널
계층형 구조 커널 :
단일형 커널의 발전형으로, 비슷한 기능을 가진 모듈들을 묶어 계층화하고, 계층간 통신을 지원한다.
모듈화의 진행으로 오류를 잡기 쉽고, 버그 수정 등이 더욱 용이해졌다.
계층형 구조 커널
운영체제의 핵심 부분. 자동차로 따지자면 엔진에 해당하며, 계기판은 인터페이스라고 할 수 있다.
8. 커널모드에 대해 설명해주세요.
답변
커널 모드는 운영체제 서비스를 제공받아 커널 영역의 코드를 실행할 수 있는 모드이다.
시스템 콜이 필요한 작업(운영체제의 권한이 필요한 파일 접근, 네트워크 통신 등)을 요청할 때, 프로세스는 커널 모드로 전환된다.
추가 내용
응용 프로그램이 자원에 접근하기 위해서는 운영체제를 통해 접근해야 한다.
이때, 응용 프로그램의 요청을 받은 운영체제는 응용 프로그램 대신 자원에 접근하여 요청한 작업을 수행하게 된다.
커널 모드와 유저 모드를 쉽게 표현한 그림.
< 커널 모드는 어떻게 동작하는가? >
1. 시스템 콜이 필요한 작업(파일 접근, 네트워크 통신 등)을 요청할 때, 프로세스는 커널 모드로 전환된다.
2. 커널 모드에서는 커널이 직접 하드웨어에 접근하여 요청된 작업을 처리한다.
3. 작업이 완료되면, 결과를 프로세스에 반환하고 유저 모드로 다시 전환한다.
Q. 커널 모드와 프로세스 스케줄링은 연관이 있나?
학습하면서 언뜻 헷갈렸던 주제이다.
결론만을 말하자면, 프로세스 스케줄링과 커널 모드는 직접적인 연결은 없다.
프로세스가 CPU를 점유하는 것과 커널 모드는 다음과 같은 차이가 있다.
1. 프로세스는 유저 모드에서 실행되며, 일반적인 작업을 수행한다.
2. 프로세스 스케줄링은 커널이 프로세스에 CPU 사용 시간을 어떻게 배분할지 결정하는 것이다.
3. 프로세스가 CPU를 점유하고 있을 때 유저 모드에서 실행될 수도 있고, 필요에 따라 커널 모드로 전환될 수도 있다. 커널 모드는 특정 작업을 요청하는 시스템 콜이 실행될 때만 발생한다.
즉, 커널 모드든 유저 모드든 프로세스가 CPU를 점유하는 기간에 이루어지고, 둘의 차이는 프로세스의 요청 권한과 종류에 따라 달라진다.
9. 유저모드에 대해 설명해주세요.
답변
사용자 모드(user mode)는 커널 모드와 달리 운영체제 서비스를 제공받을 수 없는 실행 모드이다.
일반적인 프로세스는 사용자 모드로 동작하며 일반적으로는 자원에 접근할 수 없다.
추가 내용
커널 모드를 참조할 것.
10. 폴링에 대해 설명해주세요.
답변
하드웨어 장치의 IO 수신 여부를 주기적으로 확인하는 것. CPU를 양도하지 않고, 한 프로세스가 이를 점유하며 하드웨어 제어장치의 상태를 주기적으로 체크한다.
추가 내용
<인터럽트와의 차이 : 그림>
폴링의 경우
CPU 할당 시간 동안 주기적으로 하드웨어 수신 여부를 확인한다.
인터럽트의 경우
인터럽트의 경우 프로세스 1에서 IO 인터럽트가 발생했다.
이 경우 1은 대기 상태로 변화하고, IO 수신 인터럽트를 받을 때까지 해당 상태를 유지한다.
CPU는 대기 상태인 1을 배제하고, 다음 프로세스인 2를 받아서 동작을 수행한다.
<인터럽트와 비교하여 장단점>
언뜻 사진으로만 보면 폴링을 사용하는 이유가 없어 보인다. 그럼에도 불구하고 폴링을 사용하는 이유가 몇 가지 존재한다.
1. 간단함 : 상대적으로 구현이 간단하다.
2. 적은 비용 : 인터럽트는 상대적으로 많은 비용이 수반된다 (문맥 교환 등, 인터럽트 서비스 루틴을 불러오기도 함)
1과 2로 인해, 만약 IO 수신이 빠른 편이고 전송 속도가 빨라 폴링을 몇 번 거치지 않고 수신이 완료될 수 있다면, 인터럽트보다 폴링이 더욱 효율적인 상황일 수도 있다.
그것이 아니라면, CPU를 효율적으로 사용할 수 있는 인터럽트 방식이 더욱 효율적일 것이다.
11. 인터럽트에 대해 설명해주세요.
답변
인터럽트란, CPU가 프로그램을 실행하고 있을 때, I/O 장치 등이나 소프트웨어적으로 예외 상황이 발생하여 처리가 필요할 경우 CPU에게 알려주어 실행중인 작업을 중지하고 특정 작업을 수행하는 기능이다.
인터럽트가 발생함으로써, 프로세스 동작 과정에서 먼저 처리해야 할 급한 예외를 처리하거나, 이벤트를 발생시켜 프로세스 수행 도중 필요한 긴급한 로직을 수행할 수 있게 한다.
추가 내용
<왜 쓰는가?>
CPU의 효율적인 작업을 돕는다,
IO 작업 등 입출력 연산은 CPU에 비해 연산 속도가 매우 느려 이를 기다린다면 CPU가 많은 시간을 대기하게 된다.
소프트웨어 인터럽트 역시도 프로그램 실행 중 발생하는 예외 등 요청을 처리하기 위해 발생하게 된다.
이럴 경우 동작 과정 중간에 CPU는 발생된 인터럽트를 처리한다.
인터럽트 역시도 CPU가 수행한다. 다만 동작 과정에서 별개의 이벤트나 요청 등을 처리하는 것이다.
출처 입력
<하드웨어와 소프트웨어 인터럽트>
하드웨어 : 하드웨어가 발생시키는 인터럽트로, 보통 CPU 서비스를 요청해야 할 경우 발생시킨다.
소프트웨어 : 예외 상황, 시스템 콜 등 소프트웨어가 발생하는 인터럽트를 의미한다.
<인터럽트 과정>
process A 실행 중 디스크에서 어떤 데이터를 읽어오라는 명령을 받았다고 가정해보자.
1. process A는 system call을 통해 인터럽트를 발생시킨다.
2. CPU는 일단 현재 진행 중인 기계어 코드를 완료한다.
3. 현재 프로세스의 상태를 해당 process의 PCB(Process Control Block)에 저장한다. (수행중이던 MEMORY주소, 레지스터 값, 하드웨어 상태 등 일반적인 PCB 저장 과정)
- 이는 CPU가 인터럽트를 처리하기 위해 ISR로 제어를 옮기기 때문이다. 인터럽트 처리가 끝난 이후 다시 이어서 동작하기 위해, PCB에 값을 저장한다.
4. PC(Program Counter, IP)에 다음에 실행할 명령의 주소를 저장한다.
- 인터럽트가 발생하면, CPU는 바로 다음에 실행해야 할 명령어의 주소를 PC에 저장한다.
5. 인터럽트 벡터를 읽고 ISR 주소값을 얻어 ISR(Interrupt Service Routine)로 점프하여 루틴을 실행한다.
6. ISR의 끝에 IRET 명령어에 의해 인터럽트가 종료된다(인터럽트 수행 완료)
IRET 명령어가 실행되면, PCB에 저장한 레지스터 값들 역시 복원한다.
여기에는 대피시킨 PC 값 역시 존재한다. 이를 복원하여 이전 실행 위치(이전에 실행하려고 했던 명령어의 주소)로 복원한다.
7. 이후 프로세스 동작 과정을 이어나간다.
<하드웨어 인터럽트 : '중단' 과 '대기'>
위의 예시는 인터럽트 상황에서 계속 CPU를 점유하고 있는 상황이다. (중단)
반대로 대기 상태에서는 CPU를 다른 프로세스에게 넘겨줄 수도 있다.
하드웨어 I/O 인터럽트가 발생하면, 해당 인터럽트를 발생시킨 프로세스는 I/O 작업이 완료될 때까지 CPU를 사용할 수 없으므로 '대기' 상태로 들어간다. (IO작업의 경우 일반적인 CPU 연산보다 매우 느리기 때문)
이때, 운영 체제는 CPU의 활용도를 높이기 위해 다른 준비된(ready) 프로세스에게 CPU를 할당할 수 있다.
즉, 프로세스 A가 I/O 인터럽트를 발생시키면, 다음과 같이 진행된다.
1. 프로세스 A는 I/O 작업이 완료될 때까지 CPU 작업을 중단하고 '대기' 상태가 된다.
2. 운영 체제는 문맥 교환(context switch)을 수행하여 다른 프로세스 B에게 CPU를 할당할 수 있다.
3. I/O 작업이 완료되면, 인터럽트 서비스 루틴이 완료되고, 프로세스 A는 다시 준비 상태가 되어 CPU를 할당받을 수 있다.
4. '중단' 상태는 프로세스가 인터럽트 처리를 위해 잠시 CPU 사용을 멈춘 상태를 가리키고, '대기' 상태는 I/O 작업 같은 비교적 오래 걸리는 작업을 기다리는 프로세스의 상태를 말한다.
인터럽트가 발생하면 해당 프로세스는 '대기' 상태로 전환될 수 있고, 이 때 다른 프로세스가 CPU를 점유할 기회를 얻게 된다.
12. DMA에 대해 설명해주세요.
답변
DMA(Direct Memory Access)는 CPU의 개입 없이 메모리를 접근하는 기법이다.
DMA는 IO 입출력을 CPU가 아닌 DMA 컨트롤러를 통해 컨트롤러와 상호작용하며, 연산을 수행한다. 이로 인해 CPU의 부담을 완화시켜 CPU 연산의 효율성을 높인다.
추가 내용
<왜 사용하는가?>
사진 설명을 입력하세요.
하드웨어 입출력 과정
일반적으로 IO 작업이 일어나면 CPU는 1번의 컨트롤러에서 입출력 데이터를 읽어 레지스터에 적재하고, 메모리에 저장한다. (좌측 수신 과정) 출력의 경우도 CPU가 메모리에서 값을 읽어들여와, 장치 컨트롤러로 출력을 발생시킨다.
이렇게 CPU를 항상 거친 채로 IO 작업이 일어난다면 CPU의 연산 효율에 문제가 생긴다.
이를 줄여주고자 입출력장치와 메모리가 CPU를 거치지 않고도 상호작용할 수 있는 입출력 방식인 DMA라는 개념이 등장했다.
DMA는 직접 메모리에 접근할 수 있는 입출력 기능으로, 시스템 버스에 연결된 DMA 컨트롤라는 하드웨어가 필요하다.
사진 설명을 입력하세요.
<DMA의 입출력 과정>
일반적인 DMA 입출력은 다음과 같다.
1. CPU는 DMAC에 입출력장치의 주소, 연산, 읽거나 쓸 메모리의 주소로 IO 작업을 명령한다.
CPU가 DMAC에게 작업을 명령한다.
2. DMAC는 CPU 대신 장치 컨트롤러와 상호작용하며 IO 작업을 수행한다. 이때 DMAC는 필요할 경우 메모리에 직접 접근하여 읽거나 쓰기를 수행할 수 있다.
IO 작업중 필요하다면 메모리에 접근 가능하다.
3. 작업이 끝날 경우 DMAC는 CPU에 인터럽트를 걸어 작업이 끝났음을 알린다.
끝난 뒤 인터럽트를 통해 CPU에게 작업이 끝남을 알린다.
CPU의 직접 메모리 관리와 DMAC의 경우를 그림으로 나타내면 아래와 같을 것이다.
< DMA 작업 방식 >
1. 버스트 모드 (Burst Mode)
DMAC가 데이터 전송이 끝날 때까지 버스의 제어권을 가진다.
출처 입력
- DMAC는 데이터 전송을 시작하면 전송이 끝날 때까지 시스템 버스의 제어권을 완전히 획득한다.
- 큰 블록의 데이터를 빠르게 전송할 때 사용되며, 버스트 모드에서는 CPU가 버스를 사용할 수 없으므로 CPU는 DMAC가 데이터 전송을 완료할 때까지 기다려야 한다.
- 데이터 전송이 빠르게 이루어져야 하는 상황에서 유용하다.
2. 사이클 도용 모드 (Cycle Stealing Mode)
지속적으로 시스템 제어 권한을 얻고, 반납하며 CPU가 필요할 때 빠르게 접근할 수 있다.
출처 입력
- 사이클 도용 모드에서는 DMA 컨트롤러가 시스템 버스에 접근할 때마다 CPU 작업을 잠깐 중단시키고, 필요한 데이터 전송을 위해 버스 사이클을 '도용'한다.
- DMAC는 한 번에 하나의 데이터 워드(또는 바이트)를 전송한 후 버스 제어권을 CPU에 반환한다.
- 이 방식은 CPU와 DMAC가 시스템 버스에 대한 접근을 번갈아가면서 사용할 수 있게 한다.
- CPU가 다른 작업을 계속 처리할 수 있게 하므로, 버스트 모드보다 CPU의 작업 중단 시간이 줄어들지만, 전체적인 데이터 전송 속도는 버스트 모드보다 느릴 수 있다.
3. 투명적 모드 (Transparent Mode)
CPU가 시스템 버스를 자주 사용할 때는 전송 작업을 수행하지 않고, CPU의 활동이 적을 때만 데이터 전송을 진행
출처 입력
- CPU가 사용하지 않는 버스 사이클을 '도용'하여 데이터 전송에 사용한다.
- CPU의 작업에 거의 영향을 주지 않으면서도 데이터 전송이 가능하다는 장점을 가지며, 데이터 전송이 덜 시급한 상황에 적합하다.
< 특징 정리 >
1. CPU의 개입 없이 주변장치와 주기억장치의 입출력에 관여
2. 입출력을 위한 인터럽트의 발생 횟수를 최소화하여 컴퓨터 시스템의 효율을 높인다.
3. CPU는 DMA와 상태정보 및 제어정보만을 주고 받는다.
4. DMA제어기와 CPU가 시스템 버스를 공유한다.
5. 시스템 제어권을 완전히 가지는 버스트 모드, 지속적으로 권한을 얻고 반납하는 사이클 모드, 시스템 버스가 여유로울때 사용하는 투명적 모드를 가진다.
13. 동기식 I/O에 대해 설명해주세요.
답변
동기식 I/O는 입출력 작업이 시작된 후 해당 작업이 완료될 때까지 프로세스가 대기하는 I/O 방식이다.
입출력 작업의 요청과 완료가 연속적으로 일어날 때 요청을 한 프로세스는 작업이 완료될 때까지 다음 작업을 수행할 수 없음을 의미한다.
동기와 비동기 추가 설명
동기(Synchronous)의 특징으로는 작업을 요청하고 그 결과가 완료될 때까지 기다린다.
따라서 함수나 프로세스등이 이어져서 작업할 때, 그 시작과 끝이 같다.
비동기(Asynchronous)의 경우 작업을 수행하는 주체의 시작과 끝나는 시간에 관계없이 각자 별도의 시작 시간 / 종료 시간을 가지고 별개로 움직인다.
추가 내용
동기식 I/O의 특징과 과정을 예시로 살펴보자.
1. 프로세스가 I/O 요청을 시스템 호출을 통해 요청한다.
2. 프로세스는 요청한 I/O 작업이 완료될 때까지 대기 상태가 된다.
3. I/O 작업이 진행되는 동안 프로세스는 CPU를 사용할 수 없으며, 다른 작업으로 컨텍스트 스위치하지 않는다.
4. I/O 작업이 완료되면, I/O 시스템은 프로세스에게 작업 완료를 알리고, 프로세스는 대기 상태에서 깨어나 계속해서 다음 작업을 수행한다.
5. 동기식 I/O는 구현이 간단하고 예측 가능하지만, 입출력 작업이 끝날 때까지 CPU가 대기해야 하므로 자원 활용 측면에서 비효율적일 수 있다.
6. 그렇기에 멀티태스킹 환경에서는 프로세스가 블록되는 동안(예를 들면 IO 인터럽트를 기다려서 프로세스가 '대기' 하는 동안) 다른 프로세스가 CPU를 사용하도록 스케줄링함으로써 자원 활용을 극대화하려는 전략이 사용된다.
<Blocking과 Non-Blocking>
둘의 개념은 동기 / 비동기와는 다르다.
동기/비동기는 '작업 완료를 어떻게 기다릴 것인가'에 대한 접근 방식을 나타내고, 블로킹/논블로킹은 '작업 요청 시 호출되는 함수가 즉시 반환되는가'에 대한 특성을 나타낸다.
- 블로킹 방식에서는 작업을 요청하면 해당 작업이 끝날 때까지 현재 스레드의 실행이 멈춘다.
- 논블로킹 방식에서는 작업을 요청하더라도 대기하지 않고 즉시 제어권이 반환된다.
Blocking
직접 제어할 수 없는 대상의 작업이 끝날 때까지 제어권을 넘겨주지 않는 것이다.
호출하는 함수가 I/O 작업을 요청할 때 I/O 처리가 완료될 때까지 아무 일도 하지 못하고 기다리는 것을 말한다.
사진 설명을 입력하세요.
14. 비동기식 I/O에 대해 설명해주세요.
답변
동기 IO와 다르게, 비동기 I/O에서 프로세스는 I/O 요청을 시작하고 바로 다른 작업을 계속 수행할 수 있다.
비동기 I/O는 I/O 작업의 완료를 기다리지 않기 때문에 리소스의 활용도를 높이고 시스템의 처리량을 개선할 수 있다.
추가 내용
< 어떻게 이게 가능하지? >
비동기 작업이 가능한 이유는 여러 가지가 있다.
1. 멀티쓰레딩
하나의 프로세스 내에서 동시에 여러 작업을 수행할 수 있는 쓰레드를 사용하여, I/O 작업을 기다리는 동안 다른 쓰레드가 계산 작업을 계속 진행할 수 있다.
2. 멀티코어 CPU
멀티코어 CPU를 사용하여 여러 작업을 실제로 동시에 실행할 수 있다. 하나의 코어에서 I/O 작업이 블록되더라도, 다른 코어에서 계산 작업을 계속할 수 있다.
3. 운영체제의 지원
운영체제가 비동기 I/O를 내부적으로 지원하여, I/O 작업을 시작하고 완료를 기다리지 않고 다른 작업으로 넘어갈 수 있게 해준다.
< 참고 자료 >
- 혼자 공부하는 컴퓨터구조 & 운영체제
시분할 시스템
https://pinelover.tistory.com/153
다중 프로그래밍 시스템
https://inuplace.tistory.com/280
다중처리 시스템(멀티프로세서)
대화형 시스템
https://blossomwhale.tistory.com/74
https://developer-ellen.tistory.com/37
시스템 콜
https://fjvbn2003.tistory.com/306
https://brightstarit.tistory.com/13
커널
https://velog.io/@bahar-j/%EC%BB%A4%EB%84%90Kernel%EC%9D%98-%EA%B8%B0%EB%8A%A5
커널 모드와 유저 모드
https://blockdmask.tistory.com/69
인터럽트
https://velog.io/@adam2/%EC%9D%B8%ED%84%B0%EB%9F%BD%ED%8A%B8
DMA
https://naeunbi698.tistory.com/195
https://ko.wikipedia.org/wiki/%EC%A7%81%EC%A0%91_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EC%A0%91%EA%B7%BC
동기식 IO, 비동기 IO
'기술면접 준비' 카테고리의 다른 글
프로세스와 쓰레드 면접 질문, 답변 (0) | 2023.11.16 |
---|---|
프로세스 & 스레드 (0) | 2023.11.16 |
운영체제란 무엇이고, 어떤 역할을 수행하는가? 3편 면접 질문 답변하기 (0) | 2023.11.09 |
운영체제란 무엇이고, 어떤 역할을 수행하는가? 2편 용어 정리 (3) | 2023.11.09 |
운영체제란 무엇이고, 어떤 역할을 수행하는가? 1편 (1) | 2023.11.09 |