프로세스란?
실행 중인 프로그램 → 프로그램은 디스크에 존재하는 실행을 위한 명령어와 정적 데이터 묶음인데 이것에 생명을 넣은 것이 프로세스
프로세스 상태
- Running
Ready
- 프로세스가 실행 준비
- 메모리에 올라간 상태임
- Blocked (= Sleep)
- 프로세스가 특정 작업 수행
- I/O 요청 하면 블럭되고, 다른 프로세스 실행함
보류 상태(= Swap-out 상태)
- Swapping
- 프로세스의 일부나 전체를 주기억장치로 옮겨놓는 것
- Swap-out
- 종료되지 않은 프로세스를 주기억장치에서 스왑공간(디스크의 일부)으로 이동하는 것
- Swap-in
- Swap-out된 프로세스의 이미지를 스왑 공간에서 주기억장치로 이동하는 것
- Swapping
Context Swiching (문맥 교환)
- 어떤 프로세스가 인터럽트 될 때, 프로세스 상태가 적절한 필드에 저장되고, 프로세스 상태를 블록, 대기 상태로 만든 후, 다른 프로세스를 수행시키고 수행시킨 프로세스의 상태를 적재하여 새로운 프로세스 실행하는 것
- 다수의 프로세스를 지원하고 다중처리 할 수 있게 해주는 도구 → CPU 가상화
프로세스 생성 과정
- 프로그램 코드를 메모리로 로드
- 프로그램은 실행 가능한 형식으로 디스크에 상주
- OS에서 로딩은 느리게 부분적으로 수행, 필요한 코드 일부와 데이터 일부 로딩
- 프로그램 런타임 스택 할당
- 지역변수, 함수 파라미터, 리턴 주소 등
- main의 argc, argv를 이용하여 스택 초기화
- 프로그램 힙 생성
- malloc, free등
- I/O 셋업
- STDIN, STDOUT, STDERR file descriptor 할당
- main에서 프로그램 시작
CPU 가상화
- 단일 CPU 컴퓨터에서 임의 시점에 마치 여러개의 프로세스가 수행되는 것처럼 보이게 하는 illution
- 가상화 이슈
- Performance: 시스템에 과도한 오버헤드 없어야함
- Control: CPU에 대한 통제를 유지하면서 프로세스를 효율적으로 실행해야함
제한적 직접 실행 (Limited Direct Execution)
- 목적: 프로그램을 빠르게 실행하기 위해 개발
- 방법: 프로그램을 CPU에서 직접 실행
문제점
- 제한된 연산
ex) 프로세스가 I/O나 CPU, 메모리같은 시스템자원 추가 할당 요청하면 문제 생김
만약 원하는 대로 할 수 있게 하면 파일에 대한 접근 권한 확인하는 파일 시스템 구현할때 프로세스는 이미 접근 권한을 가지고 있으니까 문제가 생김
- 해결책
- 사용자모드 / 커널모드
- 사용자모드: 실행되는 코드의 할 수 있는 일 제한 (ex. I/O 발생시 예외)
- 커널모드: 모든 작업 가능
- 이를 위해 시스템콜 제공
- 시스템콜 실행하기 위해서 trap 실행 → 커널 안으로 분기하며 특권 수준을 커널모드로 상향조정
- 사용자모드 / 커널모드
- 해결책
- 프로세스 간 전환
CPU에서 프로세스 실행중 → OS는 실행중 아님을 의미 → 프로세스 간 전환 불가
- 해결책
- 협조적 접근 방식
- 프로세스가 yield 시스템콜 호출 → 운영체제에게 제어 넘김
- 비정상적인 행위(divied-by-zero, 메모리 접근)를 하면 제거가 OS에 넘어감
- 문제점: 악의적인 프로그램 or 버그로 무한루프 빠져서 yield 호출 못하면 문제 생김
- 비협조적 접근 방식
- 프로세스가 시스템콜 호출 거부하거나 호출하지 않아 OS에 제어 넘기지 않으면 하드웨어의 도움 없이 할 수 있는거 거의 없음
- Timer interrupt 이용
- 일정 시간마다 interrupt 발생
- 협조적 접근 방식
- 해결책
- 제한된 연산
Uploaded by N2T