70년대 Unix
- 벨 연구소에서 1969년 유닉스 탄생(켄 톰슨, 데니스 리치)
- 70년대 중반 벨 AT&T에서 유닉스를 라이센스 형태로 배포
- 저렴한 가격, 소스 코드 공개로 인기를 얻음
- 버클리에서 BSD 개발
80년대 Unix
- AT&T에서 상업적으로 판매 시작하며 다양한 변종 등장
- AT&T System V
- 버클리 BSD
- Sun SunOS (Solarris)
- HP-UX
- IBM AIX
- Xenix
Posix의 등장
- 유닉스의 변종이 생기며 표준화의 필요성 대두
- Portable Operationg system
리눅스의 등장
- 1991년 리누스 토르발즈에 의해 개발됨
- 오늘날 서버 운영체제의 90% 점유
안드로이드
- 수정된 리눅스 커널 기반
- 전원 관리, Binder IPC
- ART와 프레임워크 추가
- Kotlin 기반의 어플리케이션
- Bionic libc 라이브러리 사용
IOS
- 2000년 개발된 Darwin 커널 기반(XNU커널)
- XNU : Mach + FreeBSD
- Mach: 마이크로 커널
- Darwin: 하이브리드 커널
OS 복습
- 프로그램과 프로세스
- 프로그램 → 코드 뭉치
- 프로세스 → 메모리에 실행중인 프로그램
- 보통 2차 저장장치에 들어가있음
- 유저모드와 커널모드
- 유저모드 → 일반적인 프로세스의 실행
- 커널모드 → 커널이 돌아갈 떄. 시스템 자원을 사용할 때. 유저모드에서 시스템콜을 실행할 때. 커널은 RAM에 있음. 물리 메모리의 일부 영역을 할당받음. 위치는 CPU 아키텍처마다 다름. ARM은 가상 메모리 공간의 맨 앞,
- 가상 영역에 매핑이 되어있음. 내 프로세스가 있다면 일부 영역이 커널 영역으로 사용되고 있음
- 페이지 테이블이 가상 메모리를 물리 메모리로 매핑
- 변환을 하기 위해서 메모리를 읽으면 너무 느리기 때문에 TLB를 둠
- 커널 → 물리 메모리, 모든 프로세스가 매핑 참조변수를 가지고 있음. 모든 프로세스가 같은 물리 영역에 접근하기 위해 같으네 주소값을 가지고 있음. 같은 참조를 가지고 모두 같은 곳에 접근
- 시스템 콜과 라이브러리 함수
- 프로세스의 메모리 구조
- 페이징과 스왑
- 페이지 캐시와 버퍼 캐시
- 파일 시스템
- IPC
운영체제의 역할
- 하드웨어에 대한 추상화와 보호

- 커널을 이용해 하드웨어에 접근
- 필요하다면 직접적으로 시스템콜을 호출해서 하드웨어에 접근할 수 있음
- 커널은 항상 메모리에 상주하고 있음
- 시스템 콜을 호출하는 순간 커널 모드가 되고 이후에는 사용자 프로그램으로 복귀
파일 시스템과 VPC
- 리눅스의 VFS
- 파일에 접근할 때 파일 시스템이 막아놓음
- 리눅스의 모든 장치는 파일로 되어있음
- 리눅스는 여러 개의 파일 시스템을 동시에 사용 가능
- ext4, XFS, Btrfs, f2fs, vfat, ntfs
- 파이프도 vfs처럼 파일로 추상화해서 사용
- 리눅스 실행파일 포맷 : ELF
- 텍스트 세션