운영 체제 이론: Linux 프로세스 및 프로세스 상태(프로세스 스케줄링을 위한 Big O(1) 알고리즘 데이터 구조 모델)

여기에 이미지 설명 삽입

1. 프로세스의 기본 개념

  • 폰 노이만 시스템 컴퓨터가 실행 중일 때 많은 프로그램(데이터 + 작업 명령 세트)이 메모리에 미리 로드되지만 CPU는한 번에 하나의 프로그램만 실행할 수 있습니다.(여러 프로그램이 CPU 리소스를 놓고 경쟁합니다.) 이때 운영 체제가 필요합니다.메모리에 있는 많은 프로그램 관리, CPU 리소스가 합리적으로 할당되도록 프로세스라는 개념이 있습니다.

    • 프로세스: 프로그램을 설명하는 구조 객체(PCB 구조)그리고그것이 가리키는 프로그램(데이터 및 연산 명령어 세트)
    • Linux에서는 PCB 구조의 이름이 task_struct입니다.
  • 프로세스의 PCB 구조는 운영 체제에서 다양한 데이터 구조로 구성되며 동일한 PCB 구조 개체는동시에 여러 데이터 구조에서,예를 들어:여기에 이미지 설명 삽입

  • 운영 체제프로세스 관리통해PCB 구조 객체에 대해 형성된 데이터 구조지휘하다크루드달성

  • Linux 프로세스의 PCB는 PID(숫자)로 고유하게 식별됩니다.여기에 이미지 설명 삽입

프로세스 간의 기본 관계: 부모-자식 관계

  • Linux 시스템에서는 프로세스가 라이브러리 함수를 통해 fork()하위 프로세스를 생성 할 수 있습니다.
    • pid_t fork(void);
    • 프로세스가 포크 기능을 통해 자식 프로세스를 생성한 후 부모 프로세스와 자식 프로세스가 공유합니다.fork() 함수가 위치한 코드문그리고 다음 코드 조각
    • 포크 함수의 반환 값에 대한 설명: if하위 프로세스가 성공적으로 생성되었습니다., frok 함수는 상위 프로세스에서 하위 프로세스의 PID를 반환하고, 다음과 같은 경우 하위 프로세스에서 0을 반환합니다.하위 프로세스 생성에 실패했습니다., 포크 함수는 상위 프로세스에서 -1을 반환합니다.
    • 자식 프로세스가 방금 생성되면상위 프로세스의 모든 데이터 공유, 후속 하위 프로세스는 상위 프로세스의 데이터를 처리합니다.기록 중 복사
    • ~에 따르면상위 프로세스와 하위 프로세스의 fork() 반환 값 차이, 우리는 부모-자식 프로세스 후속 조치를 만들 수 있습니다다양한 코드 세그먼트 실행
int main()
{
    
    
  printf("hello world\n");
  size_t childPid = fork();//创建子进程
  if(childPid == 0)
  {
    
    
    //子进程执行的代码段
    while(1)
    {
    
    
       printf("我是子进程,Pid:%d,PPid:%d\n",getpid(),getppid());
       sleep(1);
    }
  }
  else
  {
    
    
    //父进程执行的代码段
    while(1)
    {
    
    
       printf("我是父进程,Pid:%d,PPid:%d\n",getpid(),getppid());
       sleep(1);
    }
  }

  return 0;
}

여기에 이미지 설명 삽입

  • 작동 상태:여기에 이미지 설명 삽입
    여기에 이미지 설명 삽입
  • 상위 프로세스당신은 할 수 있습니다여러 하위 프로세스,그리고자식 프로세스오직 유일한상위 프로세스, 운영 체제에서 상위 프로세스와 하위 프로세스 간의 관계에 따라 PCB 구조 개체는 트리 데이터 구조를 형성합니다.
  • 즉, 운영 체제에서 PCB 구조 개체는 많은 데이터 구조의 네트워크에 있습니다.

2. 처리현황

  • 프로세스 상태 개요(Linux 운영 체제):여기에 이미지 설명 삽입

(1) 프로세스 R의 실행 상태

  • CPU한 번에 하나의 프로세스만 실행,CPU대응하다대기열만 실행(리눅스에서는본질적으로 해시 버킷),실행 중인 프로세스PCB 구조는 실행 대기열에 연결되며 운영 체제는순차 스케줄링큐의 PCB 구조가 가리키는 프로그램을 실행하고 계산을 위해 CPU에 넘겨줍니다.
  • 프로세스 PCB는 프로세스를 기록합니다.스케줄링 우선순위(정수) 프로세스의 스케줄링 우선순위가 영향을 미칩니다.대기열 실행의 위치
  • Linux의 프로세스 우선순위는 다음과 같이 나뉩니다.140레벨, 여기서 0~99등급이 할당됩니다.실시간 프로세스, 100~139등급이 주어집니다.비실시간 프로세스
    • 140레벨은 140개 항목에 해당합니다.대기열 분기 실행(140개의 실행 큐 분기가 해시 버킷 구조로 결합됨)
    • 프로세스 task_struct_대기열 실행에서의 위치동적 우선순위여기에 이미지 설명 삽입

Linux 프로세스 스케줄링의 Big O(1) 알고리즘 데이터 구조 모델(큐 해시 버킷 실행):

여기에 이미지 설명 삽입

  • Linux 커널에는 다음과 같은 기능도 있습니다.160비트 크기의 비트맵녹음을 위해해시 버킷 실행해시 버킷의 각 큐가 비어 있는지 여부, 실행 해시 버킷의 큐가 모두 비어 있으면 교환run과 tem의 두 배열에 대한 포인터, 프로세스 스케줄링을 계속 실행합니다.
  • 위 그림에 표시된 데이터 구조 덕분에 Linux 운영 체제 task_struct에서는우선순위별 빠른 정렬, 그리고 언제든지 O(1) 시간 복잡도로특정 우선순위의 프로세스가 있는 브랜치 실행 큐를 빠르게 찾습니다. (O(1) 큐 비우기 수행 중), task_struct 구조 객체대기열에 넣기 및 대기열에서 빼기 작업이는 리눅스 운영체제의 효율적인 프로세스 스케줄링 메커니즘을 구현하는 O(1)의 시간복잡도이기도 하다.

프로세스의 시간 조각

  • 각 프로세스에는 실행 시간 조각(예: 20ns)이 있으며 프로세스의 시간 조각에 따라 CPU의 실행 시간이 결정됩니다.단일 최대 시간, CPU에서 프로세스가 완료됩니다.타임 슬라이스 작업 후~ 할 것이다실행 대기열을 일시적으로 종료합니다.다음 파견을 기다리다
  • 타임 슬라이스의 제한으로 인해 특정 시간(예: 20ms) 내에 모든실행 대기열에서프로세스는 CPU에 의해 한 번 실행되어 형성됩니다.프로세스 동시 실행, 따라서 CPU 리소스는 다음과 같습니다.합리적인 분배그리고완전히 사용하다
  • 우리는 컴퓨터가 동시에 여러 프로그램을 실행하고 있다고 느끼지만 실제로는 CPU가 실행되고 있습니다.프로세스 타임 슬라이스에 따라각 프로세스를 매우 빠른 속도로 순회하고 실행함으로써 형성됩니다.프로세스 동시성의 결과.

(2) 프로세스의 슬립 상태(S와 D)

  • 리눅스 시스템에서프로세스의 수면 상태운영 체제 분야 이론프로세스차단된 상태
  • CPU 작동 속도그리고데이터 흐름 속도동일하지 않으므로 데이터 상호 작용 프로세스는 종종피드백을 기다리고 있습니다상태
  • 프로세스가 실행 중일 때리소스를 기다리는 중, PCB 구조는 다음과 같습니다.실행 대기열 종료그리고차단 대기열에예를 들어 프로세스에 키보드 입력 데이터가 필요한 경우 키보드의 차단 대기열에 들어갑니다.
  • 운영 체제에서는 차단 대기열의 수가 불확실합니다. 시스템의 통신 프로세스 수만큼 차단 대기열의 종류가 있습니다.여기에 이미지 설명 삽입
  • 리눅스는 다음 위치에 있습니다.차단 대기열의 프로세스중단 가능한 절전 상태(S 상태) 시스템 메모리가 부족하면 운영 체제는 스왑 디스크 파티션의 차단 큐에 있는 프로세스에 해당하는 일부 프로그램(데이터 및 명령 세트)을 임시로 저장하고 프로세스가 진입합니다.정지 상태
  • Linux 운영 체제에 메모리가 부족해지면 선택적으로 일부 메모리가 종료됩니다.차단 대기열의 프로세스, 프로세스가 매우 중요한 작업(중요한 데이터를 디스크에 쓸 때 디스크 피드백을 기다리는 등)을 수행하는 경우 해당 프로세스는 다음과 같이 표시되어야 합니다.무정전 절전 상태(D 상태), 에중단 없는 수면 상태과정처형되기 전운영 체제 요청에 응답하지 않습니다.

(3) 프로세스의 좀비 상태와 사망 상태

  • Linux 시스템에서는 상위 프로세스의 하위 프로세스가 종료되면자식 프로세스는 좀비 상태(Z 상태)로 들어갑니다.,Z 상태 프로세스상위 프로세스가 재활용될 때까지 기다립니다.PCB 구조의 종단 정보(정상 종료인지 비정상 종료인지 판단하기 위해) 상위 프로세스가 자신의 종료 정보를 처리한 경우에만 하위 프로세스가 종료 정보를 처리합니다.Z상태에서 사망상태(X상태)로, 이때 운영 체제는 하위 프로세스가 차지하는 메모리 리소스를 사용합니다.완전 재활용
  • 만약에상위 프로세스다루어지지 않았습니다좀비 자식 프로세스의 종료 정보는 다음과 같습니다.좀비 자식 프로세스~의PCB 구조 및 관련 데이터메모리에 영원히 남게 되어 메모리 누수가 발생합니다.
  • 부모-자식 프로세스인 경우상위 프로세스가 먼저 종료됩니다.자식 프로세스는 운영체제에 맡겨져 운영체제의 자식 프로세스가 되는데, 이러한 프로세스를 고아 프로세스(orphan process)라고 합니다.
    여기에 이미지 설명 삽입

Supongo que te gusta

Origin blog.csdn.net/weixin_73470348/article/details/132001886
Recomendado
Clasificación