OS 기초 이론

2025. 7. 23. 11:53·Linux

흐름 재정리

상세한 내용말고, 복습할겸 대표적인 기본 내용만 간결하게 재정리

시스템 구조 흐름

  • 하드웨어 위에서
  • -> 커널(Kernel) 동작 (하드웨어 직접 제어, 리소스 관리)
  • -> 그 위에서 응용프로그램(User Application) 동작
  • -> 응용프로그램은 시스템 콜(System Call) 통해 커널에 자원 요청

커널 모드 / 사용자 모드가 나뉘는 이유 (Why?)

  • 커널 보호 - 메모리, 프로세스, I/O를 관리하니까 중요 so 다른 응용프로그램이 이것을 건들면 안됨
  • 시스템 전체 안정성 보장
  • 잘못된 프로그램이 시스템 전체를 망가뜨리지 않도록
    -> 사용자 프로그램은 사용자 모드에서 제한적으로 실행됨
    -> 특권 명령어, I/O 접근, 메모리 접근 제한

권한 수준

  • 커널 모드 > 사용자 모드
    (모든 자원 접근 가능 ↔ 제한적 접근)

시스템 콜 흐름

  1. 사용자 모드에서 시스템 콜 호출 (ex. read(), write())
  2. 커널 진입 ( 트랩/인터럽트를 통해 모드 전환)
  3. 커널에서 시스템 콜 번호 확인
  4. 시스템 콜 테이블에서 해당 함수 주소 참조
  5. 해당 커널 함수 실행
  6. 결과값을 레지스터에 저장
  7. 사용자 모드로 복귀 + 결과 전달

프로세스 (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
'Linux' 카테고리의 다른 글
  • 커널 시스템콜 추가
  • Makefile
  • Rootfs와 Kernel 빌드 (feat Makefile)
  • Linux개발 환경
Jminu
Jminu
  • Jminu
    뇌 구조가 바이너리
    Jminu
  • 전체
    오늘
    어제
    • 분류 전체보기
      • C프로그래밍
        • 오류해결
        • 개인 공부
        • Programming Lab(학교수업)
        • MemoryTracker
      • C++
        • 개인 공부
      • 자료구조(Data Structure)
      • ARM arch
        • Cortex-M
        • FreeRTOS
      • 컴퓨터 공학(Computer Science)
        • OS
        • 컴퓨터 구조
      • Qualcomm 기업과제
      • Linux
      • Web
      • 똥글
      • 백준
      • Git 학습
        • 오류해결
        • 학습중
      • Python
        • 오류해결
        • 개인 공부
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Qualcomm
    commit
    리눅스
    이진 트리
    파일 입출력
    순환
    arm
    피보나치
    Git
    스택
    yolo
    Branch
    rubikpi3
    포인터
    파이썬
    커널
    rubik pi
    드라이버 분석
    소수
    자료구조
    커널 기여
    INIT
    동적메모리
    시스템콜
    토발즈
    버퍼
    백준
    C++
    c언어
    앤드류모튼
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Jminu
OS 기초 이론
상단으로

티스토리툴바