스케줄러, 프로세스의 관리

원래벌레·2022년 9월 13일
0

🌞 스케줄러

  • 프로세스의 상태 변화 관리
    프로세스의 상태를 변화시키며 생성에서 종료까지 과정을 관리

  • 스풀러가 디스크에 저장한 작업 중 실행할 작업을 선정하여 프로세스 생성

  • 스케줄러가 프로세스를 선택하고 디스패처가 일을한다.

🌼 프로세스 컨트롤 블록

링크가 존재하여 프로세스의 스케줄링 큐의 포인터를 저장한다.

  • 프로세스 상태 정보 저장

  • 프로세스 생성시 메모리에 PCB생성, 프로세스 종료 후 PCB 삭제

  • PCB 내에 PCB 위치를 알 수 있는 정보가 있다.

  • PCB마다 하나의 프로세스를 가지고 있다.

구조

프로세스식별자(PID)

프로세스상태 : 생성, 준비, 실행, 대기, 중단 등 상태 표시

프로그램 카운터 : 프로세스를 실행하는 다음 명령의 주소 표시

레지스터 저장 영역 : 현재 상태(사용중인 레지스터)를 저장하고 있어야 이후의 실행을 처리하는 경우에 그 상태를 유지한채로 다음 일을 할 수 있다.

프로세서 스케줄링 정보 : 우선순위, 스케줄링 큐의 포인터, 기타 스케줄 매개변수

회계 정보 : Account 프로세서 사용시간, 실제 사용 시간, 사용 상한 시간

입출력 상태 정보, 메모리 관리정보 등등 : 입출력 요구 프로세스에 할당된 입출력장치, 열린 파일 리스트, 메모리 시스템에 따른 상한,하한 결정

🌼 Context Switching

  • 이전의 프로세스 상태를 보관하고 새로운 프로세스의 상태를 적재하는 작업

🌞 프로세스의 계층 구조

  • 부모 프로세스와 자식 프로세스는 같은 메모리를 공유 하면서 같은 코드를 실행한다.
#include <stdio.h>
#include <unistd.h>

int main()
{
	int i;
    for(i=0 ;i<3 ;i++)
    {
    	fork();
    }
    return 0;
}

-> 8개의 process가 실행된다.

why ? 같은 메모리를 공유 하기 때문에 i의 값이 초기화 되지 않는다.

UNIX 메소드

  • fork()
    -> 실패시 return -1 성공시 부모 return 자식PID, 자식 = 0 리턴

  • execlp("/bin/ls", "ls", NULL);
    -> 부모로부터 물려 받은 코드를 ls로 대체한다.

🌞 프로세스의 생성

🌼 시기

  • 일괄처리 환경 : 준비큐에 작업이 도착할 때

  • 대화형 환경 : 새로운 사용자가 로그온 할 때

🌼 프로세스 생성시 필요한 세부 작업

1) 프로세스 식별자 할당
2) 프로세스의 모든 굿어 요소를 포함할 수 있는 주소 공간과 PCB 공간 할당
3) PCB초기화(프로세스 상태, 프로그램 카운터 등 초기화, 자원 요청, 프로세스 스케줄링 정보등을 포함)
4) 해당 큐에 삽입

🌼 부모 프로세스는 자식 프로세스 생성 후 다음 중 선택 가능

  • 자식과 동시 실행

  • 자식이 모두 종료할 때까지 대기

🌞 프로세스의 종료

  • 정상 종료(Normal exit)
    main의 return, exit()

  • 실패(Error exit : voluntary)
    프로세스가 치명적 에러를 발견했을 때 스스로 종료, 파일 검색 실패, 입출력이 명시된 횟수 초과하여 실패할떄

  • 치명적 오류(Fatal error:involuntary)
    산술오류, 보호오류, 데이터 오류, 액세스 위반, 메모리 부족
    Core dump, segmentation fault

  • 다른 프로세스에 의해 종료(involuntary)
    kill, TeminateProcess()

  • 부모 프로세스가 자식 프로세스보다 먼저 종료되면 두가지 옵션
    - 연속 옵션 : VMS : 부모가 종료되면 자식도 같이 종료

    - 고아를 양부모에게 입양 : UNIX

  • 부모 프로세스가 자식 프로세스의 종료 상태를 회수하지 않으면 좀비나 고아가 됨
    - 종료 상태 : 자식ID, 종료 코드, 비정상 종료 시 시그널번호
    - 부모 프로세스가 자식 프로세스의 종료 상태를 회수한다. : wait 명령어

고아와 좀비의 차이 : 좀비는 회수 불가능 고아는 회수 가능, 고아가 죽으면 좀비가 됨

profile
학습한 내용을 담은 블로그 입니다.

0개의 댓글