운영체제의 핵심 부분으로 운영체제의 다른 부분 및 응용 프로그램 수행에 필요한 여러가지 서비스를 제공함, 자원을 효율적으로 관리하기 위해 CPU 스케줄링, 메모리관리, 입출력관리, 파일시스템 관리 등의 업무를 수행
커널에서 중요한 자원을 관리하기 때문에, 사용자가 그 중요한 자원에 접근하지 못하도록 모드를 2가지로 나눈것이 커널모드와 유저모드
사용자가 직접적으로 하드웨어 장치를 제어한다면 큰 문제가 발생할 수 있기 때문에 유저 어플리케이션은 system call을 통해 직접적인 하드웨어 요청이나 중요한 시스템을 요청
운영체제의 저널이 제공하는 서비스에 대해 응용프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스
보통 C나 C++과 같은 고급언어로 작성된 프로그램들은 직접 시스템 호출 방법을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법
(유저모드 -> 커널모드 요청)
프로세스가 유저모드에서 실행되다가 특별한 요청이 필요할때 system call을 이용해서 커널에 요청
(커널모드 -> 유저모드로 반환)
system call의 요청을 받은 커널이 그 요청에 대한 일을 하고 결과값을 system call의 리턴 값으로 전함
흐름1) 유저모드에서 실행되고 있는 유저 어플리케이션에서 시스템콜이나 라이브러리 함수를 통해서 I/O 요청
-> 커널 모드로 전환. 커널의 I/O 관리자가 키보드나 모니터의 장치드라이버에 요청
-> 장치드라이버에서 키보드나 모니터에서 받은 return 값을 커널에 return
-> 커널은 해당 값을 user application으로 return
-> 유저모드로 전환.
흐름2) 유저모드에서 C언어로 작업중 malloc 를 통해서 메모리 할당을 받으려고 system call 호출
-> 커널 모드로 전환. 메모리 [관리 할당 or 잘못된 접근] return값을 user application으로 전달
-> 유저모드로 전환.
ref)
1. https://blockdmask.tistory.com/69
2. https://www.youtube.com/watch?v=t8VWeIkaBe8
3. https://medium.com/pocs/%EC%BB%A4%EB%84%90-kernel-c5e19f8b34c0