부산대학교 운영체제 노트 정리
시간: 1946년
프로세스와 스레드 소개:
- 프로세스 상태, 스케줄링, 프로세스 구현, 컨텍스트 스위치 작업
- 프로세스 개념:
- 프로세스: 실행 중인 프로그램
- 프로세스 실행은 순차적으로 진행되어야 함
- 프로세스에는 다음이 포함됨:
- CPU 컨텍스트 (레지스터)
- 프로그램 카운터, 스택 포인터
- 운영 체제 자원 (주소 공간, 열린 파일 등)
- 기타 정보 (PID, 상태, 소유자 등)
- 최신 시분할 시스템에서 보호 및 작업의 기본 단위
- 프로세스는 프로세스 ID (PID)로 식별됨
- 하나의 프로그램은 여러 개의 프로세스를 가질 수 있음
- 프로세스 유형:
- I/O-bond 프로세스: I/O에 더 많은 시간을 소요, 짧은 CPU 버스트가 많음
- CPU-bound 프로세스: 계산 오래 걸림, 긴 CPU 버스트가 적음
- 프로세스 생성:
- 프로그램 코드를 메모리에 로드:
- 프로그램은 실행 가능한 형식으로 디스크에 존재
- OS는 필요할 때만 코드를 로드하는 게으른 로딩 수행
- 프로그램의 런타임 스택 할당:
- 지역 변수, 함수 매개변수 및 반환 주소에 사용
- 스택을 인자로 초기화 (argc와 main() 함수의 argv 배열)
- 프로그램의 힙 생성:
- 동적으로 요청된 데이터에 사용됨
- malloc() 호출로 공간 요청, free() 호출로 해제
- OS는 기타 초기화 작업 수행:
- 입력/출력(I/O) 설정
- 각 프로세스는 기본적으로 세 개의 열린 파일 디스크립터가 있음 (표준 입력, 출력, 오류)
- 프로그램을 main()에서 실행 시작
- fork()와 exec():
- fork():
- 새로운 프로세스를 생성하고 부모 프로세스를 복제
- 부모는 자식의 주소 공간을 복제
- 부모는 자식이 종료될 때까지 기다리거나 병렬로 실행될 수 있음
- exec():
- 현재 프로세스 이미지를 새 프로그램으로 교체
- 프로세스 계층:
- 부모 프로세스는 자식 프로세스를 생성, 자식은 다른 프로세스를 생성하여 프로세스 나무 형성
- 자원 공유 모드:
- 부모와 자식이 모든 자원 공유
- 자식이 부모의 자원의 부분 집합을 공유
- 부모와 자식이 자원을 공유하지 않음
- 실행 모드:
- 부모와 자식이 동시에 실행
- 부모가 자식이 종료될 때까지 대기
- 주소 공간 모드:
- 자식은 부모의 복사본
- 자식은 새로운 프로그램이 로드됨
- 프로세스 종료:
- 정상 종료(자발적)
- 오류 종료(자발적)
- 치명적 오류(비자발적)
- 세그멘테이션 오류
- 다른 프로세스에 의해 종료 (신호 수신 시)
- 종료된 프로세스의 리소스는 OS에서 해제됨
- 좀비 프로세스: 기다리지 않는 부모 프로세스
- 프로세스 상태:
- 새: 프로세스 생성 중
- 실행 중: 명령어 실행 중
- 대기: 이벤트 발생 대기 중
- 준비: 프로세서 할당 대기 중
- 종료: 프로세스 실행 완료
- 컨텍스트 스위치:
- CPU가 한 프로세스에서 다른 프로세스로 전환하는 행위
- 행정적 오버헤드: 상태 저장, 메모리 맵 복원 등
- 컨텍스트 스위치가 발생할 때 시스템은 유용한 작업을 수행하지 않음
- Linux 예제: 총 135,098,709 컨텍스트 스위치, 평균 1,335회/초
- PCB (프로세스 제어 블록):
- 각 프로세스와 연관된 정보
- 프로세스 상태, 프로그램 카운터, CPU 레지스터 등