Q) 커널모드와 사용자모드는 무슨 차이가 있나요?
A)커널모드는 운영체제가 CPU를 받아 운영체제의 코드를 실행하는 부분으로, 모든 종류의 명령을 실행할 수 있습니다. 반면 사용자모드는 사용자프로그램이 CPU를 받아 제한적인 명령만 실행합니다. 사용자 프로그램이 하드웨어 접근 등 보안이 요구되는 명령을 실행하기 위해서는 운영체제에게 이 명령을 대신해줄 것을 요청하는데, 이를 시스템콜이라고 합니다. 즉 프로그램이 자신의 주소 공간 내에 있는 함수가 아닌 커널의 함수를 호출하는 것을 뜻합니다. 또한 보안이 요구되는 명령들은 특권명령이라고 합니다. 특권명령은 커널모드에서만 실행할 수 있습니다.
Q) 인터럽트가 무엇인가요?
A) 인터럽트는 CPU에게 하던 일을 멈추고 인터럽트에 관한 내용을 먼저 처리하라고 알리는 역할을 합니다.
Q) 인터럽트를 통해 입출력 연산이 이루어지는 과정을 얘기해주세요.
A) 프로그램 A가 실행 중이라고 합시다. 현재 CPU는 메모리에 올라와있는 프로그램 A에 접근하여 명령을 수행중입니다. 그러다 프로그램 A가 입출력 명령을 내립니다. 근데 프로세스는 입출력 장치에 직접 입출력 명령을 내릴 수 없습니다. 입출력 명령은 특권명령이기 때문입니다. 따라서 프로세스는 시스템콜을 통해 운영체제에게 CPU를 넘겨주고 입출력 명령을 부탁해야 합니다. 이때 프로세스는 인터럽트를 발생시킵니다. 그러면 CPU에 붙어있는 인터럽트 라인에 이 인터럽트가 세팅되며, CPU는 자신의 일을 하면서 수시로 인터럽트 라인을 체크하는데 이 인터럽트를 발견합니다. 그러면 이 인터럽트를 인지하고 수행중이던 프로그램을 멈춘 후 CPU 제어권을 운영체제로 넘겨줍니다. 운영체제는 인터럽트 라인을 통해 이 인터럽트가 입출력 명령임을 알게되고 입출력 작업을 수행하게 됩니다. 이 과정에서 CPU는 입출력장치의 컨트롤러에게 이 명령을 내립니다.
입출력은 시간이 오래 걸리는 작업이기 때문에 CPU는 이를 기다리고 있을 수만은 없습니다. 그 동안 운영체제는 CPU의 제어권을 다른 프로그램인 프로그램 B에게 넘겨주게 됩니다. 이후 입출력 작업이 완료되면, 즉 입출력 장치의 로컬버퍼에 원하는 자료가 다 들어오게 되면 컨트롤러가 다시 CPU에게 인터럽트를 발생시킵니다. 그럼 CPU가 이를 인지하고 시행중이던 프로그램 B를 잠시 멈추고 인터럽트 처리루틴에 따라 해당 인터럽트를 처리합니다. 로컬버퍼에 있는 A가 요청한 데이터를 A 내부의 메모리 영역으로 읽어옵니다. 그리고 CPU제어권은 다시 프로그램B에게 넘어가게 됩니다.
Q) 그런데 이 과정에서 프로그램이 중단되었다가 다시 실행되는 것이 어떻게 가능할까요?
A) 그것은 문맥교환(context switch)를 통해 가능합니다. 프로그램 A가 CPU를 운영체제나 다른 프로그램에게 넘겨줄 때 그 프로세스의 상태를 Process Control Block, PCB라는 곳에 저장합니다. 그리고 다른 프로세스가 수행될 때는 해당 프로세스의 PCB를 읽어옵니다.
Q) PCB에 대해 좀 더 자세히 설명해주세요.
A) PCB는 프로세스의 수행 상태 정보를 갖고 있으며, 커널의 데이터 부분에 저장됩니다.
PCB의 구성 요소는 크게 네 가지가 있습니다.
OS가 관리상 사용하는 정보로 프로세스 상태, 프로세스 아이디, 스케줄링 정보, 우선순위 등이 있습니다.
CPU 수행 관련 정보로 프로그램 카운터, 레지스터가 있습니다.
메모리관련 정보로 프로세스의 코드, 데이터, 스택의 위치 정보가 있습니다.
파일 관련 정보로 어떤 파일을 읽고 있는 지 정보가 있습니다.
Q) 동기식 입출력과 비동기식 입출력은 무슨 차이가 있나요?
동기식 입출력은 프로그램이 입출력 명령에 대한 결과를 기다리는 동안 다음 명령을 수행하지 않고 기다리는 것입니다. 비동기식 입출력은 입출력 명령에 상관없이 다음 명령을 수행하는 것입니다.
동기식 입출력은 CPU가 낭비된다는 단점이 있으므로 보통 기다리는 시간동안 CPU제어권은 다른 프로세스에게 넘어가게 됩니다. 반면 비동기식 입출력은 시스템콜로 운영체제에게 입출력 명령을 부탁한뒤 다시 바로 CPU 제어권을 얻습니다.
Tech Interview/Operating System
[운영체제] 하드웨어 수행 과정
반응형
댓글