1. User mode, Kernel mode
커널은 운영체제의 중요한 부분을 일컫는 말이다.
CPU, 메모리 혹은 쓰레드 패킷 등의 자원들에 직접 접근할 수 있는 부분을 말한다.
CPU 스케쥴링, 메모리 관리, 입출력 관리, 파일시스템 관리 등의 업무를 맡는다.
따라서 이렇게 중요한 부분을 사용자가 접근하여 자원에 침범하는 일을 막기 위해 운영체제에서는 OS를 두가지 모드로 나누어 놓는다.
- 유저 모드
사용자가 접근할 수 있는 영역으로 user application code가 이곳에서 실행된다.
- 커널 모드
모든 드라이버, 메모리, cpu에 직접 접근하여 명령을 내릴 수 있다.
2. System call
프로세스는 user mode와 kernel mode를 왔다갔다 하면서 실행된다.
예를 들어 fopen()문의 코드가 실행되면 system call(opent())로 kernel에게 메모리 접근 요청을 보낸다.
system call의 요청을 받아서 처리하고나면 다시 user mode로 돌아와 프로그램이 실행된다.
system call은 software interrupt의 한 종류인 trap이라고도 한다.
3. Interrupt
프로세서가 프로그램을 실행하고 있다.
디스크에서 어떤 정보를 읽어오라는 문장을 만났다.
system call을 통해 리눅스 커널 안에 있는 "리눅스 커널 interrupt 함수"를 호출한다.
프로세서는 잠시 실행 흐름을 중단하고 현재 작업 state를 저장한다.
발생한 Interrupt를 처리한다.
다시 suspend된 작업으로 돌아온다.
4. Trap
trap은 user process가 발생시키는 synchronous 소프트웨어 인터럽트이다.
0으로 나누는 오류 혹은 system call(service request)등으로 의해 발생된다.
printf()가 실행됐다고 해보자. printf는 C library에서 제공하는 interface이다.
이 printf는 write()라는 system call을 호출하고
결국은 write가 output으로 data를 내보내는 실질적 책임을 지고 있다.
5. Trap and Interrupt
Trap | Interrupt |
user program이 kernel의 서비스를 사용하기 위해 요청하는 신호이다 | hardware device가 cpu에게 지금 집중해야 하는 작업이 있다고 신호를 보내는 것이다. |
synchronous : interrupt를 발생시키고 나서 그 응답을 기다리는게 아니라 다른 작업을 계속 한다는 뜻이다. await()이 없음 | asynchronous : request를 하고 wait()하고 기다린다. |
interrupt의 한 종류이다. software interrupt | hardware interrupt |
os안에 있는 기능들을 실행하며, trap handler가 통제한다. | 하드웨어는 cpu에게 특정한 interrupt handler routine을 실행하도록 명령한다. |
6. System call procedure
user program이 fork로 새로운 프로세스를 생성해 달라고 하고 있다.
fork는 c라이브러리에 있는 코드이다. (아직 user level안에 있음)
기계어로 번역된 fork를 보면 0x80번지에 있는 system_call()을 호출하도록 되어있다.
movl 2, %eax 여기에 있는 2는 system_call_table에 있는 시스템 콜 종류를 나타낸다.
2번 인 sys_fork()를 호출한다.
linux/arch/x86/entry/syscalls/syscall_64_tbl 파일을 직접 열어보면
system call 테이블을 볼 수 있다.
7. System call 종류
- Process control : 프로세스 생성, 종료, 프로세스에게 메모리 할당 등
- File management : 파일 생성 삭제 열기 닫기 등
- Device management : 디바이스 읽기 쓰기 등
- information maintenance
- Protection
- Communication : 통신 연결, message 보내기 닫기
'ComputerScience > Linux' 카테고리의 다른 글
Linux8. Process (1) | 2023.10.09 |
---|---|
Linux6. Makefile (0) | 2023.09.28 |
Linux4. Design Principle of Linux Kernel (0) | 2023.09.28 |
Linux2. linux commands and tools (0) | 2023.09.14 |
Linux1. Operating System? Linux? (0) | 2023.09.14 |