운영체제 개요 및 정의 스킵
큰 프로그램은 무겁고 다루기 힘드므로 [커널, 쉘, 유틸리티]들로 잘게 나눈다
# 커널
- 항상 메모리에 상주
- 주요 코드는 C로 작성, 나머지는 어셈블리어(하드웨어 의존적, 빠른 속도 덕에)
- 3parts [프로세스 관리 / 파일 시스템 / IO시스템]
# 유틸리티
- 필요할 때만 메모리에 있다가 다시 사라짐
- 명령
# 쉘
- 커널과 유틸리티의 작업을 관리
- 키보드 입력 관리, 명령 수행 (interpreter)
# 파일
- sequence of bytes
# Single-user System
- Windows
- 보안 적음
- 보기좋은 GUI
# Multi-user System
- Linux
- 보안 좋음
# kernel mode
- 모든 메모리에 접근이 가능
- 어떠한 명령어도 실행 가능함
# user mode
- 나의 코드(local) 메모리에만 접근이 가능
- 처리하는 명령어 제한됨
내가 작성한 my source를 gcc컴파일 -> my a.out chmodk -> trap 핸들러
-> trap(user에서 kernel mode로)
* 모든 프로그램은 user mode와 kernel mode를 왔다갔다하며 변경한다 *
# system_call
읽고 쓰는 명령어는 굉장히 많지만, 시스템 콜 명령어는 단 하나.
system_call()
- write와 같은 쓰기 함수는 system call이 발생
- int $0x80와 같은 형태는 intel cpu가 trap을 발생시켰다는 얘기
- trap이 발생 = cpu 모드를 user모드에서 kernel모드로 변경
- HW가 트랩핸들러 커널 내부의 함수인 sys_call()로 간다. (sys_call은 어셈블리어로 되어있음)
- system call이 유효하다면 테이블로부터 system call function 의 주소를 가져온다
system call 의 특징 : sys_명령어()로 이루어짐
user mode에서 kernel mode로 갔을 때 정보의 내용이 이동해야하는 상황이 발생
독립된 정보들임에도 불구하고 서로 access가 가능
kernel끼리정보 access가 가능.
# my source 명령어 처리 과정 순서
- printf() 명령어 처리해야함
- 컴파일러가 gcc를 통해 라이브러리화함
- 시스템 콜 함수 write(2) <- 제한된 명령어
- 제한된 명령어로 trap이 발생함
- trap핸들러가 kernelmodeㄹ 변경
- system call number 를 생성해서
- 접근
# 새로운 system call 작성할때
장점 :
실행이 간단해짐. 능력이 향상
단점 :
system call number를 부여해야 하는데 나의 보드에서만 사용가능하기에 사용 지양
## 프로세스 관리
user program이 있으면 그 프로그램들을 관리하기 위한 PCB블록이 커널 내부에 존재
하드웨어마다 대응하는 데이터 구조체가 커널 내부에 있어야함
# PCB의 구성
PID, 우선순위, 상태, 파일 실행(키보드, 모니터 이벤트), 경로(실행환경), 터미널(자원, 상태), 부모자식 프로세스
# 자식 프로세스 생성 순서
프로세스마다 스택은 두개이다 (커널스택, 컴파일러가 만들어주는 유저스택)
fork 1. PCB 공간 확보하고 부모의 PCB를 초기값으로 설정 <- 상속환경, 자원 공유
fork 2. 메모리 공간(이미지공간) 확보 (자식부모는 같은 코드)
exec 3. 디스크에서 새로운 이미지 가져오기
exec 4. 대기줄 선다
exec() : 디스크로부터 새로운 이미지를 가져온다
fork() : 부모 프로세스와 똑같은 프로세스를 만든다
- 실습
fork = call once, return twice = 한 번 실행하면 두 개가 반환된다
pid = fork() 하는 순간 main코드와 같은 코드가 자식프로세스로 생성됨
'ESL 연구실 활동 > Kernel of Linux' 카테고리의 다른 글
리눅스커널강의 7~9강 (작성중) (0) | 2022.04.17 |
---|---|
리눅스커널강의 5~6강 (0) | 2022.04.15 |
리눅스커널강의 3~4강 (0) | 2022.04.15 |
리눅스 커널 강의 0 (0) | 2022.04.15 |