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
  • 텍스트 세션