💡시스템 호출이란?
기본적으로 '운영체제(Operating System)' 는 Operating(운영)
이란 이름에 걸맞게 컴퓨터를 제대로 실행 및 사용하게 해주는 프로그램이다.
마우스를 움직이는 것부터(마우스란 하드웨어로부터 오는 신호를 모니터 픽셀과 함께 해석하여 필요한 계산값을 CPU에 전달하고, 계산받은 값을 프로그램에 전달해주거나 화면에 보여주는 것)우리가 더블 클릭한 프로그램 실행과 종료까지..
그래서 무슨 관계가 있나면, 바로 시스템 콜(system call)이란 것이 바로 프로세스가 운영체제(system)에게 운영체제 기능을 요청
하는(call) 것!!!!
💡시스템 호출을 하는 이유는?
시스템콜(system call)'이란 프로세스가 컴퓨터를 관리하는 시스템(system)인 운영체제에게 어떤 기능(서비스)를 사용하게 해달라고 요청(call)할 때 사용하는 방법이다.
예시를 들자면 '운영체제'는 회사 관리자
고 '프로세스'는 말단 직원
인 것이다.
'프로세스3'이란 직원이 자기 자리에 앉아 자신의 프로그램 코드를 실행중이였는데, 만약 자기 프로그램외 특정 파일 데이터를 필요로 한다고 쳐보자. 이럴 때 그냥 조용히 독자적으로 파일 데이터를 읽어들이는 것이 아니라, 관리자 운영체제에게 허락을 요청(call)을 해야한다.
//참고사진:
https://mamu2830.blogspot.com/2021/01/whatIsSystemCall.html
따라서 운영체제가 관리하는 모든 자원(네트워크, 디스크, 메모리 등등등)을 '프로세스'가 필요로 할 경우 전부다 이 '시스템콜(system call)'을 통해 사용해야 한다. 파일을 여는 것(open)도 그렇고, 기존 프로세스를 다른 프로그램으로 바꾸는 것(exec), 똑같은 프로세스를 하나 더 만드는 것(fork) 그리고 다른 프로세스에게 어떤 행위를 지시하는 시그널(신호)을 보낼 때(kill)도 말이다!
User가 애플리케이션으로 운영체제의 치명적인 데이터를 수정/삭제하는 권한을 막기 위해서다. 직접적인 하드웨어 요청이나 기타 시스템요청은 OS가 제공하는 System call을 통해 호출하도록 제공한다. 만약 유저 애플리케이션이 System call을 호출하여 사용하면 해당 애플리케이션은 커널모드로 잠시 전환되는 작업을 거치게 된다.
💡시스템 호출의 매개변수 전달 방식
운영체제에 매개변수를 전달하는 방법은 크게 세 가지가 있다.
- 매개변수를 레지스터에 넣어 전달한다. 그러나 레지스터 개수보다 매개변수의 개수가 더 많을 때가 있다. 이런 문제가 생겼을 때는 밑에 두 가지 방법으로 해결한다.
- 매개변수를 메모리 내 블록[혹은 테이블]에 저장하고, 블록의 주소를 레지스터에 매개변수로 넣어 전달한다.
- 프로그램에 의해 매개변수가 스택에 (push)넣어지고 운영체제에 의해 (pop)꺼내어진다.
운영체제는 블록이나 스택 방법을 선호하는데, 이는 전달되는 매개변수 개수나 길이를 제한하지 않기 때문이다.
비교적 (1)의 경우는 CPU 레지스터의 공간이 부족하면 누락이 될 수 있기 때문에 선호를 잘 하지 않고 (2),(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)
- 장치의 논리적 부착(attach) 또는 분리(detach)
- 장치 속성 획득, 장치 속성 설정
- 읽기, 쓰기, 위치 변경
- 장치를 요구(request devices), 장치를 방출release device)
정보 유지(Information Maintenance)
- 시간과 날짜의 설정과 획득(time)
- 시스템 데이터의 설정과 획득(date)
- 프로세스 파일, 장치 속성의 획득 및 설정
통신(Communication)
- 통신 연결의 생성, 제거
- 메시지의 송신, 수신
- 상태 정보 전달
- 원격 장치의 부착 및 분리
참고:
'CS' 카테고리의 다른 글
[DB] 💡레디스(Redis)란? (0) | 2022.09.08 |
---|---|
[OS] 기술 면접 질문 리스트 (0) | 2022.08.30 |
[OS] 페이징과 세그멘테이션 (0) | 2022.08.30 |
[OS] 페이지 교체 알고리즘 (0) | 2022.08.30 |
[OS] 인터럽트(Interrupt) (0) | 2022.08.30 |