부산대학교 운영체제 노트 정리

  • 시간: 1946년

  • 프로세스와 스레드 소개:

    • 프로세스 상태, 스케줄링, 프로세스 구현, 컨텍스트 스위치 작업

  • 프로세스 개념:
    • 프로세스: 실행 중인 프로그램
    • 프로세스 실행은 순차적으로 진행되어야 함
    • 프로세스에는 다음이 포함됨:
    • CPU 컨텍스트 (레지스터)
    • 프로그램 카운터, 스택 포인터
    • 운영 체제 자원 (주소 공간, 열린 파일 등)
    • 기타 정보 (PID, 상태, 소유자 등)
    • 최신 시분할 시스템에서 보호 및 작업의 기본 단위
    • 프로세스는 프로세스 ID (PID)로 식별됨
    • 하나의 프로그램은 여러 개의 프로세스를 가질 수 있음
    • 프로세스 유형:
    • I/O-bond 프로세스: I/O에 더 많은 시간을 소요, 짧은 CPU 버스트가 많음
    • CPU-bound 프로세스: 계산 오래 걸림, 긴 CPU 버스트가 적음

  • 프로세스 생성:
    1. 프로그램 코드를 메모리에 로드:
    • 프로그램은 실행 가능한 형식으로 디스크에 존재
    • OS는 필요할 때만 코드를 로드하는 게으른 로딩 수행
    1. 프로그램의 런타임 스택 할당:
    • 지역 변수, 함수 매개변수 및 반환 주소에 사용
    • 스택을 인자로 초기화 (argc와 main() 함수의 argv 배열)
    1. 프로그램의 힙 생성:
    • 동적으로 요청된 데이터에 사용됨
    • malloc() 호출로 공간 요청, free() 호출로 해제
    1. OS는 기타 초기화 작업 수행:
    • 입력/출력(I/O) 설정
    • 각 프로세스는 기본적으로 세 개의 열린 파일 디스크립터가 있음 (표준 입력, 출력, 오류)
    1. 프로그램을 main()에서 실행 시작

  • fork()와 exec():
    • fork():
    • 새로운 프로세스를 생성하고 부모 프로세스를 복제
    • 부모는 자식의 주소 공간을 복제
    • 부모는 자식이 종료될 때까지 기다리거나 병렬로 실행될 수 있음
    • exec():
    • 현재 프로세스 이미지를 새 프로그램으로 교체

  • 프로세스 계층:
    • 부모 프로세스는 자식 프로세스를 생성, 자식은 다른 프로세스를 생성하여 프로세스 나무 형성
    • 자원 공유 모드:
    • 부모와 자식이 모든 자원 공유
    • 자식이 부모의 자원의 부분 집합을 공유
    • 부모와 자식이 자원을 공유하지 않음
    • 실행 모드:
    • 부모와 자식이 동시에 실행
    • 부모가 자식이 종료될 때까지 대기
    • 주소 공간 모드:
    • 자식은 부모의 복사본
    • 자식은 새로운 프로그램이 로드됨

  • 프로세스 종료:
    • 정상 종료(자발적)
    • 오류 종료(자발적)
    • 치명적 오류(비자발적)
    • 세그멘테이션 오류
    • 다른 프로세스에 의해 종료 (신호 수신 시)
    • 종료된 프로세스의 리소스는 OS에서 해제됨
    • 좀비 프로세스: 기다리지 않는 부모 프로세스

  • 프로세스 상태:
    • 새: 프로세스 생성 중
    • 실행 중: 명령어 실행 중
    • 대기: 이벤트 발생 대기 중
    • 준비: 프로세서 할당 대기 중
    • 종료: 프로세스 실행 완료

  • 컨텍스트 스위치:
    • CPU가 한 프로세스에서 다른 프로세스로 전환하는 행위
    • 행정적 오버헤드: 상태 저장, 메모리 맵 복원 등
    • 컨텍스트 스위치가 발생할 때 시스템은 유용한 작업을 수행하지 않음
    • Linux 예제: 총 135,098,709 컨텍스트 스위치, 평균 1,335회/초

  • PCB (프로세스 제어 블록):
    • 각 프로세스와 연관된 정보
    • 프로세스 상태, 프로그램 카운터, CPU 레지스터 등