2023.10.24 TIL
System Call 이란?
핵심 기능
- 운영체제 커널과 사용자 응용 사이의 인터페이스
- 운영체제의 기능을 활동할 수 있도록 제공하는 API
- 사용자 모드에서 커널 모드로 진입하는 경로
주요 시스템 콜
open(), close(), read(), write(), loctl()
- 그 외 프로세스 관리, 통신, 프로세스 간 통신 등을 위한 시스템 콜 존재
Bible…
Advanced Programming in the UNIX Environment
운영체제(커널)을 이루는 것들
- 프로세스 자료구조, 프로세스 스케줄링
- 디바이스 제어 (상호배제)
- 메모리 관리, 가상메모리
- 네트워크 지원 (TCP/IP Socket Programming)
- 클라우드/가상화 지원 (AWS, Azure, GCP)
- 파일시스템
- 플래시메모리 제어
- 보안 지원
네트워킹 및 소켓 프로그래밍
- 네트워크 상의 두 개체를 연결, 정보 교환하기 위한 체계
- 네트워크 연결을 파일 입출력과 유사한 방법으로 구현
- TCP/IP 프로토콜 네트워크 지원
- 클라이언트-서버 프로토콜 구현
ARM 프로세서
ARM 프로세서 아키텍쳐의 특징
- 간단한 RISC(Reduced Instruction Set Computing) 아키텍쳐
- 저전력
- 자체적으로 CPU를 생산하지 않음 (모두 설계 라이센스))
- 성능 최적화를 위해 운영체제와 협력하는 기능 확대
- 자동차, IoT, 가전, 서버 등에 활용
CPU 아키텍처에 대한 이해
RISC Architecture (vs CISC)
- 명령어 수가 적다
- 연산 시 피연산자의 값을 Register에서만 가져온다. Memory에서 직접 가져오지 않는다.
- load-store architecture
- 연산의 예측성 확보, 빠른 속도
- Register가 많다
- 파이프라인 구조
- 하나의 명령어를 파이프라인 실행으로 나누는데, RISC는 이게 잘 되어있다.
Inclusion Property : 메모리 계층 구조에서 지켜지는 원리
상위에 있는 메모리의 contents는 반드시 하위에 있는 메모리의 contents의 부분집합이어야 한다.
- Cache
- Memory
- Secondary Storage
Locality : 왜 cache메모리가 필요한가?
CPU가 굉장히 빠른 속도로 내용을 가져올 수 있음
- Cache에는 내용이 저절로 채워짐
- CPU가 Memory에서 access한 내용을 Cache에 올려놓고, 두번째부터는 cache에서 access
- 한번 접근한 내용은 다음에 또 접근할 가능성이 높다
- 그 주변 주소의 내용을 접근할 가능성도 높다
- 그 가능성을 Hit rate 라고 한다
Cache Coherence
멀티 프로세서에서 메모리 내용의 정확성 유지
- 여러개 CPU에서 하나의 Memory를 access하고 내용을 수정할 경우 서로 Cache에 다른 내용을 가지고 있을 수 있다
- 서로 내용을 맞춰준다
Kernel Mode vs User Mode
Exception : 특별한 처리가 필요한 사건
- Interrupt를 포함하는 더 큰 개념
- 프로그램의 흐름을 정지시키고 다른 곳에서 무언가 해야할 때
- 정상적인 상황
- System Call (User Mode → Kernel Mode)
- Page Fault
- 오류인 상황
- 정상적인 Page Fault가 아닌 경우
- 사용자 권한 관련 규정을 어긴 경우
주요 운영체제 개념
운영체제 원리를 이해하는 키워드들
-
프로세스 관리
프로세스 스케줄링, CFS(Complete Fair Scheduling), 실시간 스케줄링, 프로세스 라이프 사이클, Inter-Process Communication
-
메모리 관리
Virtual Memory, Demand Paging, Page, Page Fault, Page Table, TLB
-
파일시스템
압축 파일 시스템, 저널링 파일 시스템, 플래시 메모리, 버퍼 캐시, 마운트, proc 파일링 시스템, 디바이스 노드
프로세스 스케줄링
- 목적
- Fairness (for computer resources CPU, Memory)
- CFS(Complete Fair Scheduling) vs RT(Real Time Scheduling)
프로세스 라이프 사이클
모든 프로세스는 fork()에 의해 부모 프로세스로부터 생성되고, 이후 부모에 의해 삭제된다.
프로세스의 실체
- Process
- App이 실행될 수 있는 모든 정보를 가지고 있음
- 사이즈가 매우 큼
- Thread
- light-weight process
Virtual Memory : 왜 쓰는가?
- Physical Memory의 크기가 제한적이다
- Physical Memory의 주소를 Virtual Memory에서 mapping
- 보안상의 이유
- 자원을 보호 → Virtual Memory 간에 access 불가능
Page, Paging
SWAP 메모리
Disk를 Memory처럼 사용한다
플래시 메모리 : 무엇이 다른가?
- Read는 빠르고 Write는 매우 느리다
- write의 과정 → 너무 복잡
- 내용을 수정하려면 새로운 내용을 다른곳에 쓰고 기존 위치에 mapping
- 이전 내용은 나중에 한꺼번에 지워짐
저널링 파일시스템 : 왜 저널링을 사용하는가?
플래시 메모리의 write가 복잡해서
- 내용을 수정하면 이전 버전을 그대로 두고 수정된 버전을 계속 새로 저장
- read할땐 최신 버전을 읽음
버퍼캐시
- Disk의 file1을 수정함
- 수정된 내용이 Memory에 들어가있음
- Memory 안의 Buffer Cache를 File 대신 사용
- Replacement Algorithm LRU
디바이스 드라이버
- 하드웨어를 접근하는 채널
- 모든 디바이스는 file을 통해 접근
open(), close(), read(), write()
디바이스 드라이버의 종류
- 문자 디바이스 드라이버
- 블록 디바이스 드라이버
디바이스 드라이버를 작성한다는 것
- 디바이스의 초기화 코드 작성
- 디바이스의 인터럽트 처리 부분 작성 (Interrupt handler)
- 디바이스 접근을 위한 다양한 시스템콜의 내용 작성
디바이스 접근 예
Int fd;
fd = open("/dev/ttyS0", O_RDWR);
write(fd, "Hello", 5);
close(fd);
open()을 통해 획득한 fd를 통해 다양한 시스템콜을 호출하여 디바이스 제어
- 필요한 작업을 끝낸 후에는
close() 호출 → Memory에 할당된 resource 지우기
가상화 기술, 리눅스 컨테이너, Docker
가상화
- [L1] Infrastructure (하드웨어)
- [L2] Hypervisor : 하드웨어를 가상의 하드웨어처럼 보여주는 SW Layer
- [L3] Guest OS를 위에 올릴 수 있음
Docker
- [L1] Infrastructure (하드웨어)
- [L2] Host OS (Linux) → 그대로 유지, Share
- [L3] Docker → Linux를 쪼개서 각각 서로 다른 App set들이 돌아가게 하는 것
- 각 set들은 자신이 독점하는 것처럼 느껴지게 한다 (각각 서로 다른 computer처럼)
- Container → 각각의 Docker instance(가상화된 machine)에 resource를 할당
- 가상화된 machine들을 관리해주는 기술이다
AI 반도체
NVIDIA A100이 가장 많이 쓰임
왜 쓰는가? GPU 말고 AI specific 반도체가 필요한 이유
- AI의 과다한 연산 비용
- 대량, 병렬 메모리 접근 + 연산을 통합 필요
- 성능 향상 + 비용 최적화 필요
- 국내 시장: Rebellions, Furiosa AI 등