1. 시스템 콜이 무엇인지 설명해 주세요
시스템 콜은 사용자 모드에서 운영체제 서비스를 제공받기 위한 요청으로
시스템 콜 요청시 사용자 모드에서 커널 모드로 전환되어 cpu 자원에 접근할 수 있습니다.
이중 모드: cpu가 명령어를 실행하는 모드를 "사용자 모드"와 "커널 모드"로 구분하는 방식
- 사용자 모드
: 운영체제 서비스를 제공받을 수 없는 실행 모드
: 커널 영역의 코드를 실행할 수 없는 모드 (자원 접근 불가)
- 커널 모드
: 운영체제 서비스를 제공받을 수 있는 실행 모드
: 커멀 영역의 코드를 실행할 수 있는 모드 (자원 접근 명령어 실행 가능)
1-1. 우리가 사용하는 시스템 콜의 예시를 들어주세요
대표적인 시스템 콜으로 fork(), exec(), wait(), exit()가 존재합니다.
- fork()
자식 프로세스를 생성하는 시스템 콜입니다.
fork()를 통해 자신의 복사본을 자식 프로세스로 생성합니다.
이때, 자식 프로세스를 위한 메모리가 새롭게 할당됩니다.
생성된 프로세스는 부모 프로세스의 자원을 상속받습니다. (PID와 저장된 메모리의 위치는 다름)
- exec()
메모리 공간을 다른 프로세스 내용으로 교체하는 시스템 콜입니다.
fork()를 통해 생성된 자식 프로세스는 exec() 시스템 콜을 통해 새로운 프로세스로 전환됩니다.
메모리가 새롭게 할당되지 않고, exec()을 호출한 프로세스는 새로운 프로세스에 의해 덮어쓰기 됩니다.
- wait()
자식 프로세스가 종료될 때 까지 대기하는 시스템 콜입니다.
해당 함수를 사용하여 부모, 자식의 종료시점을 동시화 시킬 수 있습니다.
프로세스의 종료 상태가 저장되는 항목들은 부모 프로세스가 wait()을 호출할 때까지 남아있다.
좀비(zombie) 프로세스 | 고아(orhpan) 프로세스 |
종료되었지만 부모 프로세스가 wait() 함수를 호출하지 않은 프로세스 | 부모 프로세스가 자식 프로세스가 종료되기 전 먼저 종료되어 wait()을 호출 할 수 없는 프로세스 |
- exit()
프로세스를 종료하는 시스템 콜입니다.
모든 자원을 반납한 뒤 부로프로세스에게 종료 상태를 나타내는 인자를 전달합니다.
1-2. 시스템 콜이, 운영체제에서 어떤 과정으로 실행되는지 설명해 주세요.
시스템 콜은 소프트웨어 인터럽트 방식으로 실행됩니다.
먼저, 제어가 인터럽트 벡터를 통해 운영체제 내의 서비스 루틴으로 전달됩니다.
이후 커널은 명령을 검사하여 어떤 시스템 콜이 발생하였는지 결정합니다.
사용자가 인수를 통해 전달한 서비스 유형을 확인하고, 서비스 루틴 요청을 수행한 뒤 시스템 콜 다음 명령으로 복귀합니다.
1-3. 시스템 콜의 유형에 대해 설명해 주세요.
시스템 콜의 유형에는 "프로세스 제어", "파일 조작", "장치 조작", "정보 유지 보수", "통신", "보호" 등으로 분류할 수 있습니다.
프로세스 제어(Process Control)
- 끝내기(end), 중지(abort)
- 적재(load), 실행(execute)
- 프로세스 생성(create process)
- 프로세스 속성 획득과 설정(get process attribute and set process attribute)
- 시간 대기(wait time)
- 사건 대기(wait event)
- 사건을 알림(signal event)
- 메모리 할당 및 해제 : malloc, free
파일 조작(File Manipulation)
- 파일 생성(create file), 파일 삭제(delete file)
- 열기(open), 닫기(close)
- 읽기(read), 쓰기(write), 위치 변경(reposition)
- 파일 속성 획득 및 설정(get file attribute and set file attribute)
장치 관리(Devide Management)
- 장치를 요구(request devices), 장치를 방출release device)
- 읽기, 쓰기, 위치 변경
- 장치 속성 획득, 장치 속성 설정
- 장치의 논리적 부착(attach) 또는 분리(detach)
정보 유지(Information Maintenance)
- 시간과 날짜의 설정과 획득(time)
- 시스템 데이터의 설정과 획득(date)
- 프로세스 파일, 장치 속성의 획득 및 설정
통신(Communication)
- 통신 연결의 생성, 제거
- 메시지의 송신, 수신
- 상태 정보 전달
- 원격 장치의 부착 및 분리
보호(Protection)
- get file Permissions
- set file permissions
1-4. 운영체제의 Dual Mode 에 대해 설명해 주세요.
시스템과 시스템 자원을 보호하기 커널모드와 유저모드로 구분하여 실행되는 작업을 구분하는 방식을 의미합니다.
커널 모드
- 컴퓨터 자원에 직접 접근이 가능한 모드입니다.
- 하드웨어 명령어, cpu 명령어를 사용할 수 있습니다.
유저 모드
- 컴퓨터 자원에 직접 접근이 불가능한 모드입니다.
- 제한된 자원에만 접근할 수 있습니다.
- 유저 애플리케이션 코드가 실행되는 모드입니다.
- 커널 모드로 전환을 요청할 수 있습니다.
1-5. 왜 유저모드와 커널모드를 구분해야 하나요?
잘못되거나 악의적인 프로그램으로부터 시스템과 시스템 자원을 보호하기 위해 유저모드와 커널모드를 구분해야 합니다.
(운영체제와 사용자는 컴퓨터 시스템의 자원을 공유합니다.)
1-6. 서로 다른 시스템 콜을 어떻게 구분할 수 있을까요?
각 시스템 콜에는 번호가 할당됩니다.
시스템 콜 인터페이스에서 관리되는 시스템 콜 테이블과 해당 시스템 콜 번호를 매핑하여 해당 함수를 실행합니다.
질문 리스트는 아래 레포지터리를 참고하였습니다.
VSFe/Tech-Interview (github.com)
'cs > [cs] 기술면접준비' 카테고리의 다른 글
[운영체제] 면접 예상 질문 & 답변 모음 - 인터럽트(interrupt) (0) | 2024.03.27 |
---|