흐름 재정리
상세한 내용말고, 복습할겸 대표적인 기본 내용만 간결하게 재정리
시스템 구조 흐름
- 하드웨어 위에서
- -> 커널(Kernel) 동작 (하드웨어 직접 제어, 리소스 관리)
- -> 그 위에서 응용프로그램(User Application) 동작
- -> 응용프로그램은 시스템 콜(System Call) 통해 커널에 자원 요청
커널 모드 / 사용자 모드가 나뉘는 이유 (Why?)
- 커널 보호 - 메모리, 프로세스, I/O를 관리하니까 중요 so 다른 응용프로그램이 이것을 건들면 안됨
- 시스템 전체 안정성 보장
- 잘못된 프로그램이 시스템 전체를 망가뜨리지 않도록
-> 사용자 프로그램은 사용자 모드에서 제한적으로 실행됨
-> 특권 명령어, I/O 접근, 메모리 접근 제한
권한 수준
- 커널 모드 > 사용자 모드
(모든 자원 접근 가능 ↔ 제한적 접근)
시스템 콜 흐름
- 사용자 모드에서 시스템 콜 호출 (ex. read(), write())
- 커널 진입 ( 트랩/인터럽트를 통해 모드 전환)
- 커널에서 시스템 콜 번호 확인
- 시스템 콜 테이블에서 해당 함수 주소 참조
- 해당 커널 함수 실행
- 결과값을 레지스터에 저장
- 사용자 모드로 복귀 + 결과 전달
프로세스 (Process)
작업 실행 단위
- 프로그램: 보조 기억장치에 저장되어있는 실행파일
- 프로세스: 실행시켜 프로그램이 메모리에 적재되었을 때
가상 주소 (Virtual Address)
프로세스마다 각자의 가상주소 공간이 있음
- 실제 메모리가 아닌 가상의 주소를 사용
- 프로세스가 실제 메모리 어디에 위치해있는지는 모름
- 다른 프로세스의 메모리에 접근 X
주소 공간
프로세스가 접근 가능한 메모리의 범위
- 사용자 공간
- 사용자/커널 모드 둘다 접근가능
- 프로세스 마다 다르다
- 커널 공간
- 커널모드에서만 접근 가능
- 프로세스마다 동일 (함께 같은 커널 공간을 사용)
IPC (inter process communication)
- 프로세스끼리 IPC를 사용하여 서로 통신
- 프로세스마다 주소 공간이 다르므로 시스템 콜을 통해 커널의 도움 받음
종류
- 커널이 값을 전달받아서 대상 프로세스에 전달
- 실제 메모리의 동일한 영역 프로세스들이 맵핑받음 (ex, 공유 메모리)
- 값복사 필요X, 속도 빠름 But 순서 꼬일 가능성 (동시성 문제)
Linux IPC프로그래밍 연습할 필요 있음..
스케줄링 (Scheduling)
- CPU의 자원 관리
- 어떤 시점에 어떤 코어에서 실행할지 결정
- 코어 개수보다 많은 프로세스도 실행 가능 (스케줄링에 의해)
시분할 스케줄링 (time sharing scheduling)
- time slice를 두고 프로세스를 교대로 실행
- 프로세스를 교체할 때 문맥 전환 과정 필요 -> context switching
문맥 전환 (context switching)
실행 중이던 프로세스 상태 저장, 앞으로 실행할 프로세스의 저장된 상태 불러옴
컨텍스트 스위칭 많이 발생하면 오버헤드 -> 성능 저하
디바이스 드라이버 (Device driver)
하드웨어를 직접 제어하는 소프트웨어
- 인터럽트 처리, 하드웨어와 통신
- 드라이버가 다른 드라이버 사용 가능
- 하드웨어를 직접접근 -> 커널모드에서 동작
why?
- OS가 모든 하드웨어를 지원할 수 없음
- 하드웨어 개발자들이 편한 SW개발위해서 API지원
가상 파일 시스템 (Virtual File System)
파일을 다루는 시스템 콜
- open
- read
- write 같은...
것들을 공통된 인터페이스로 제공 -> 각기 다른 파일시스템을 일관된 인터페이스로 편리하게 접근 가능
커널에 새로운 기능을 추가할 때 시스템콜 추가 없이 file_operations만 정의하면 됨
/dev: 디바이스 드라이버 제공/proc: 프로세스 정보 제공/sys: 하드웨어 정보 제공
'Linux' 카테고리의 다른 글
| 커널 시스템콜 추가 (3) | 2025.07.25 |
|---|---|
| Makefile (2) | 2025.07.24 |
| Rootfs와 Kernel 빌드 (feat Makefile) (0) | 2025.07.21 |
| Linux개발 환경 (4) | 2025.07.17 |
| Arm 어셈블리 명령어 간단 소개 (0) | 2023.08.10 |