11주차 발표 주제로 시스템 콜을 선정했다.
시스템 콜이란 ? : 사용자 모드에서 제한된 연산을 수행하려면 system call을 사용한다
os는 시스템 콜이라는 api를 제공하여 유저 모드에서 직접 실행하기에는 너무 크리티컬한 작업들을 수행할 수 있게 합니다. 예를 들어 유저 프로그램이 파일 시스템 접근, 프로세스 생성 및 제거, 다른 프로세스와의 통신, 메모리 할당 작업 등을 처리하고 싶을 때 시스템 콜을 사용합니다.
시스템 콜이 필요한 이유 : OS가 물리 자원 가상화를 해야 해서
운영체제가 하는 일은 cpu, 메모리, 디스크와 같은 물리 자원을 가상화하는 것입니다.
cpu를 가상화한다는 것은 여러 프로세스가 동시에 cpu를 쓰고 있지만, cpu가 여러 개인 것처럼 만들어서 개별 프로세스 입장에서는 마치 cpu를 혼자 쓰는 것처럼 보이게 하는 것입니다. cpu 가상화를 위해서 os는 시분할 방식을 사용합니다.
그리고 메모리를 가상화하기 위해서 운영체제는 프로세스 마다 가상 주소 공간을 갖게 합니다. ram의 크기는 한정적이기 때문에 실제로는 실행되는 모든 프로세스의 데이터를 ram에 한꺼번에 다 올리지 못하지만, 가상 주소 공간을 물리 주소와 매핑하여 개별 프로세스 입장에서는 마치 ram 공간을 혼자 쓰는 것처럼 보이게 합니다.
디스크를 가상화 하는 방법은 파일 시스템을 이용하는 것입니다. 메모리는 프로세스별로 가상화하지만, 디스크는 프로세스 별로 따로 관리하도록 하지 않습니다. 디스크에 있는 정보들 (예를 들면 실행파일)은 여러 프로세스 사이에서 주로 공유되기 때문입니다.
파일 시스템은 운영체제가 데이터를 영속적으로 관리하고 저장하기 위해 사용하는 s/w입니다.
사용자는 "파일 이름 + offset"만 다루면 되고,
OS는 "이름 → inode → 블록 → 디스크"로 매핑해서 처리합니다
여기서 알 수 있는 사실은, 운영체제가 물리 자원을 가상화하기 위해서는 프로그램 실행 권한을 제한해야 한다는 것입니다.
프로그램이 실행될 때 아무 제약도 걸지 않으면 다음과 같은 문제가 발생합니다.
1. 프로세스가 os에게 치명적인 작업을 하지 않는다는 보장이 없고 2. os는 프로세스 제어를 할 수 없기 때문에 시분할 방식 기법을 쓸 수 없습니다.
그래서 커널 모드가 필요!
그래서 프로그램 실행을 사용자 모드(user mode), 커널 모드(kernel mode)로 나누어 하드웨어에 대한 접근을 제한합니다.
예를 들어 사용자 모드에서 실행 중일 때, 입출력 요청을 직접 하면 예외가 발생되고 os는 해당 프로세스를 종료시킵니다.
system call 실행 과정
trap 발생 -> cpu는 현재 작업을 저장(context save) -> 커널 모드로 진입 -> trap handler로 점프 -> 커널 코드 실행 -> 처리 완료 후 다시 유저모드로 복귀
유저 프로세스가 trap을 호출할 때 그 trap이 커널 코드의 어느 부분까지 실행해야 하는지 지정해줄 수 없습니다. 주소를 명시해준다는 것은 커널 내부의 원하는 지점을 접근할 수 있다는 의미이기 때문입니다.
그래서 트랩 테이블(trap table)을 사용합니다. 트랩 테이블은 예외, 인터럽트, 시스템 콜 발생 시 어디로 점프해서 어떤 인터럽트 핸들러를 실행할지 정의되어 있으며, cpu가 참조하는 테이블입니다.
'정글 > Pintos' 카테고리의 다른 글
| [pintos] 내 Argument Passing 좀 어떻게 해봐 (ㅠㅠ) (0) | 2025.05.29 |
|---|---|
| [pintos] 2주차 - User Memory, System Calls 구현 과정 (1) | 2025.05.28 |
| [pintos] 파일 디스크립터 간단한 설명 (0) | 2025.05.27 |
| [pintos] 프로세스 - PID / fork로 자식 스레드가 생성되는 과정 (0) | 2025.05.26 |
| [pintos] 2주차 - Argument Passing 구현 과정 (0) | 2025.05.24 |