시스템 호출은 사용자 프로그램이 운영 체제와 인터페이스하는 방법입니다. 프로그램은 여러 서비스를 요청하고 OS는 요청을 충족하기 위해 일련의 시스템 호출을 호출하여 응답합니다. 시스템 호출은 어셈블리 언어나 다음과 같은 고급 언어로 작성할 수 있습니다. 씨 또는 파스칼 . 시스템 호출은 고급 언어가 사용되는 경우 운영 체제가 직접 호출할 수 있는 미리 정의된 함수입니다.
이 기사에서는 운영 체제의 시스템 호출에 대해 배우고 해당 유형 및 기타 여러 사항에 대해 논의합니다.
시스템 호출이란 무엇입니까?
시스템 호출은 컴퓨터 프로그램이 실행 중인 운영 체제의 커널에 서비스를 요청하는 방법입니다. 시스템 호출은 프로그램을 통해 운영 체제와 상호 작용하는 방법입니다. 시스템 호출은 컴퓨터 소프트웨어에서 운영 체제 커널로의 요청입니다.
그만큼 응용프로그램 인터페이스(API) 운영 체제의 기능을 사용자 프로그램에 연결합니다. 이는 운영 체제와 프로세스 간의 링크 역할을 하여 사용자 수준 프로그램이 운영 체제 서비스를 요청할 수 있도록 합니다. 커널 시스템은 시스템 호출을 통해서만 접근할 수 있습니다. 리소스를 사용하는 모든 프로그램에는 시스템 호출이 필요합니다.
시스템 호출은 어떻게 이루어지나요?
컴퓨터 소프트웨어가 운영 체제의 커널에 액세스해야 할 때 시스템 호출을 수행합니다. 시스템 호출은 API를 사용하여 운영 체제의 서비스를 사용자 프로그램에 노출합니다. 커널 시스템에 액세스하는 유일한 방법입니다. 실행을 위해 리소스가 필요한 모든 프로그램이나 프로세스는 운영 체제와 사용자 프로그램 간의 인터페이스 역할을 하는 시스템 호출을 사용해야 합니다.
다음은 시스템 호출이 사용자 함수와 어떻게 다른지에 대한 몇 가지 예입니다.
string.compareto C#
- 시스템 호출 기능은 커널 프로세스를 생성하고 사용하여 비동기 처리를 실행할 수 있습니다.
- 시스템 호출은 표준 서브루틴보다 더 큰 권한을 갖습니다. 커널 모드 권한이 있는 시스템 호출은 커널 보호 도메인에서 실행됩니다.
- 시스템 호출은 공유 라이브러리나 커널 보호 도메인에 없는 기호를 사용하는 것이 허용되지 않습니다.
- 시스템 호출에 대한 코드와 데이터는 전역 커널 메모리에 저장됩니다.
운영 체제에서 시스템 호출이 필요한 이유는 무엇입니까?
운영 체제에서 시스템 호출을 요구해야 하는 다양한 상황이 있습니다. 다음과 같은 상황은 다음과 같습니다.
- 파일 시스템이 파일을 생성하거나 삭제하려는 경우 필수입니다.
- 네트워크 연결에는 데이터 패킷을 보내고 받기 위한 시스템 호출이 필요합니다.
- 파일을 읽거나 쓰려면 시스템 호출이 필요합니다.
- 프린터, 스캐너 등의 하드웨어 장치에 액세스하려면 시스템 호출이 필요합니다.
- 시스템 호출은 새로운 프로세스를 생성하고 관리하는 데 사용됩니다.
시스템 호출 작동 방식
응용 프로그램은 사용자 공간이라는 메모리 영역에서 실행됩니다. 시스템 호출은 커널 공간에서 실행되는 운영 체제의 커널에 연결됩니다. 애플리케이션이 시스템 호출을 생성할 때 먼저 커널로부터 권한을 얻어야 합니다. 이는 현재 프로세스를 일시 중지하고 제어권을 커널로 전송하는 인터럽트 요청을 사용하여 이를 달성합니다.
요청이 허용되면 커널은 파일 생성 또는 삭제와 같은 요청된 작업을 수행합니다. 애플리케이션은 입력으로 커널의 출력을 받습니다. 애플리케이션은 입력이 수신된 후 프로시저를 재개합니다. 작업이 완료되면 커널은 결과를 애플리케이션에 반환한 다음 데이터를 커널 공간에서 메모리의 사용자 공간으로 이동합니다.
간단한 시스템 호출은 시스템 날짜 및 시간 검색과 같은 결과를 제공하는 데 몇 나노초가 걸릴 수 있습니다. 네트워크 장치 연결과 같은 보다 복잡한 시스템 호출에는 몇 초 정도 걸릴 수 있습니다. 대부분의 운영 체제는 병목 현상을 피하기 위해 각 시스템 호출에 대해 별도의 커널 스레드를 시작합니다. 최신 운영 체제는 다중 스레드로 구성되어 있어 다양한 시스템 호출을 동시에 처리할 수 있습니다.
시스템 호출 유형
일반적으로 시스템 호출에는 다섯 가지 유형이 있습니다. 이는 다음과 같습니다:
조인을 사용하여 SQL에서 업데이트
이제 다양한 유형의 시스템 호출에 대해 하나씩 알아 보겠습니다.
프로세스 제어
프로세스 제어는 프로세스를 지시하는 데 사용되는 시스템 호출입니다. 일부 프로세스 제어 예제에는 프로세스 생성, 로드, 중단, 종료, 실행, 처리, 종료 등이 포함됩니다.
파일 관리
파일 관리는 파일을 처리하는 데 사용되는 시스템 호출입니다. 일부 파일 관리 예제에는 파일 생성, 파일 삭제, 열기, 닫기, 읽기, 쓰기 등이 포함됩니다.
장치 관리
장치 관리는 장치를 처리하는 데 사용되는 시스템 호출입니다. 장치 관리의 몇 가지 예로는 읽기, 장치, 쓰기, 장치 속성 가져오기, 장치 해제 등이 있습니다.
스캐너 스캔 자바
정보유지관리
정보 유지 관리는 정보를 유지하는 데 사용되는 시스템 호출입니다. 시스템 데이터 가져오기, 시간 또는 날짜 설정, 시간 또는 날짜 가져오기, 시스템 데이터 설정 등을 포함한 정보 유지 관리의 몇 가지 예가 있습니다.
의사소통
통신은 통신에 사용되는 시스템 호출입니다. 통신 연결 생성, 삭제, 메시지 보내기, 수신 등을 포함한 몇 가지 통신 예가 있습니다.
Windows 및 Unix 시스템 호출의 예
Windows 및 Unix 시스템 호출의 다양한 예가 있습니다. 이는 아래 표와 같습니다.
프로세스 | 윈도우 | 유닉스 |
---|---|---|
프로세스 제어 | 생성프로세스() 종료프로세스() WaitForSingleObject() | 포크() 출구() 기다리다() |
파일 조작 | 파일 생성() 파일 읽기() 쓰기파일() 닫기 핸들() | 열려 있는() 읽다() 쓰다() 닫다() |
장치 관리 | 콘솔 모드 설정() 읽기콘솔() 쓰기콘솔() | Ioctl() 읽다() 쓰다() |
정보유지관리 | 현재프로세스ID() 가져오기 타이머 설정() 잠() | Getpid() 경보() 잠() |
의사소통 | 파이프 생성() 파일매핑 생성() MapViewOfFile() | 파이프() Shmget() 엠맵() |
보호 | 파일보안() 보안 설명자 초기화() 보안 설명자 그룹 설정() | Chmod() 우마스크() 친() |
여기서는 몇 가지 방법에 대해 간략하게 알아봅니다.
열려 있는()
그만큼 열려 있는() 시스템 호출을 사용하면 파일 시스템의 파일에 액세스할 수 있습니다. 파일에 리소스를 할당하고 프로세스가 참조할 수 있는 핸들을 제공합니다. 많은 프로세스가 한 번에 또는 단일 프로세스로만 파일을 열 수 있습니다. 그것은 모두 파일 시스템과 구조를 기반으로 합니다.
읽다()
파일 시스템의 파일에서 데이터를 얻는 데 사용됩니다. 일반적으로 세 가지 인수를 허용합니다.
- 파일 설명자.
- 읽은 데이터를 저장하는 버퍼입니다.
- 파일에서 읽을 바이트 수입니다.
읽을 파일의 파일 설명자를 사용하여 파일을 식별하고 다음을 사용하여 열 수 있습니다. 열려 있는() 읽기 전에.
기다리다()
일부 시스템에서는 프로세스가 진행되기 전에 다른 프로세스가 실행을 완료할 때까지 기다려야 할 수도 있습니다. 상위 프로세스가 하위 프로세스를 만들면 하위 프로세스가 완료될 때까지 상위 프로세스 실행이 일시 중지됩니다. 그만큼 기다리다() 시스템 호출은 상위 프로세스를 일시 중단하는 데 사용됩니다. 하위 프로세스가 실행을 완료하면 제어권이 상위 프로세스로 반환됩니다.
쓰다()
사용자 버퍼의 데이터를 파일과 같은 장치에 쓰는 데 사용됩니다. 이 시스템 호출은 프로그램이 데이터를 생성하는 한 가지 방법입니다. 일반적으로 세 가지 인수가 필요합니다.
- 파일 설명자.
- 데이터가 저장되는 버퍼에 대한 포인터입니다.
- 버퍼에서 쓸 바이트 수입니다.
포크()
프로세스는 다음을 사용하여 자체 복제본을 생성합니다. 포크() 시스템 호출. 이는 운영 체제에서 프로세스를 생성하는 가장 일반적인 방법 중 하나입니다. 상위 프로세스가 하위 프로세스를 생성하면 하위 프로세스가 완료될 때까지 상위 프로세스의 실행이 중단됩니다. 하위 프로세스가 실행을 완료하면 제어권이 상위 프로세스로 반환됩니다.
네트워크 및 네트워크 유형
닫다()
파일 시스템 액세스를 종료하는 데 사용됩니다. 이 시스템 호출이 호출되면 프로그램에 더 이상 파일이 필요하지 않으며 버퍼가 플러시되고 파일 정보가 변경되며 결과적으로 파일 리소스 할당이 취소됨을 나타냅니다.
실행()
실행 파일이 이미 실행 중인 프로세스에서 이전 실행 파일을 대체할 때 이 시스템 기능이 호출됩니다. 새로운 프로세스가 구축되지 않으므로 이전 프로세스 식별은 그대로 유지되지만 새 프로세스가 데이터, 스택, 데이터, 헤드 등을 대체합니다.
출구()
그만큼 출구() 프로그램 실행을 종료하는 데 사용되는 시스템 호출입니다. 이 호출은 스레드 실행이 완료되었음을 나타내며 특히 다중 스레드 환경에서 유용합니다. 운영 체제는 프로세스 사용 후 프로세스에서 소비한 리소스를 회수합니다. 출구() 시스템 기능.