시스템 콜(System Call)
시스템 호출이라고도 하며,
운영 체제의 커널이 제공하는 서비스에 오는 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
- 사용자 프로그램이 디스크 파일에 접근할 때
- 화면에 결과를 출력하는 등의 작업이 필요할 때
- 사용자 프로그램이 특권 명령의 수행을 필요로 할 때
→ 운영체제에게 특권 명령의 대행을 요청하는 것이 시스템 콜
각 시스템 콜에는 번호가 할당된다
시스템 콜 인터페이스는 시스템 콜 번호와 시스템 콜 핸들러 함수 주소로 구성되는 시스템 콜 테이블을 유지한다
운영체제는 자신의 커널 영역에서 해당 인덱스가 가리키는 주소에 저장되어있는 루틴을 수행한다
작업이 완료되면, 인터럽트를 발생시켜서 CPU에게 수행 완료를 알린다
시스템 콜이 발생했을 때, 경우에 따라 추가적인 정보가 필요할 수도 있는데, 그러한 정보가 담긴 매개변수들을 OS에 어떻게 전달하는가
- 매개변수를 CPU 레지스터에 전달한다
- 전달해야 하는 매개변수보다 레지스터 수가 작으면, 매개변수를 메모리에 저장해서 해당 메모리의 주소를 레지스터에 전달한다
- 매개변수는 프로그램 스택에 의해 push 될 수도 있다
→ 2, 3번의 경우 매개변수의 갯수, 길이에 제한이 없어서 선호되는 방식임
예시
cd in.txt out.txt
→ in.txt의 파일 내용과 같은 내용을 복사하여 out.txt 파일을 만듦
- 사용자로부터 입력 받을 때 I/O 시스템 콜 호출 필요
- 현재 디렉토리에서 in.txt 파일에 접근 가능한 지 확인하기 위한 시스템 콜 호출
- 접근 불가하면 에러 발생 후 프로그램 종료 시스템 콜 호출
- 접근 가능하면 복사한 파일을 저장 후 ‘output.txt’ 파일명이 있는지 검사하기 위한 시스템 콜 호출
- 파일 명이 존재하는지의 여부를 검사하기 위한 시스템 콜 호출
- 파일 명이 존재하면, 덮어씌우거나 이어서 붙이거나 함
- 파일 명이 존재하지 않으면 파일을 저장하는데, 이 때 시스템 콜을 호출
시스템 콜이 필요한 이유
우리는 일반적으로 응용 프로그램을 사용하는데,
유저레벨 프로그램은 유저레벨의 함수들만으론 많은 기능을 구현하기 힘들다 ! → 커널(Kernel)의 도움을 반드시 받아야 한다
이러한 작업은 응용 프로그램으로 대표되는 유저 프로세스에서 수행할 수 없고, 반드시 커널모드로 전환한 후에야 해당 작업을 수행할 권한이 생긴다
권한은 왜 필요할까? 권한이 없을 때, 해커가 악의적으로 시스템 콜을 사용하는 경우 초보 사용자가 아무 함수를 호출했을 때 시스템 전체를 망가뜨리는 경우 → 이러한 명령어들은 커널 모드에서만 실행할 수 있도록 설계되어있다 → 시스템 콜을 호출할 경우에는 운영체제에서 불법으로 여기고 trap을 발생시킨다
일반 명령 (유저 모드)
메모리에서 자료를 읽어와 CPU에서 계산하고 메모리를 쓰는 일련의 명령들, 모든 프로그램이 수행 가능
특권 명령 (커널 모드)
보안이 필요한 명령,각종 장치에 접근하는 명령
'개발일지 > Spring' 카테고리의 다른 글
[Server] ERD(Entity Relationship Diagram) (0) | 2023.12.13 |
---|---|
[Server] Web Sever & WAS (0) | 2023.10.11 |
[AWS] AWS에 대하여 (0) | 2023.10.02 |
[Spring] 스프링 입문 - AOP (0) | 2023.10.01 |
[Spring] 스프링 입문 - JPA (0) | 2023.10.01 |