Notas do sistema operacional - 002 gerenciamento de processos e multithreading

Algumas informações complementares, a estrutura organizacional é mais arbitrária ~

A introdução de processos: Após o surgimento de sistemas multiprogramas, a capacidade de descrever conceitos de programas estáticos é insuficiente. Um novo conceito é introduzido para descrever a situação dentro do sistema e descrever as regras de atividade de várias operações dentro do sistema.

Controle do processo

Primitivas de controle de processo

Para gerenciar com eficácia os processos no sistema, geralmente o sistema fornece uma série de operações básicas, essas operações são chamadas de primitivas. As primitivas de controle de processo comumente usadas são:

Estabelecendo primitivas de processo
A principal tarefa desta primitiva é estabelecer um bloco de controle de processo PCB para o processo estabelecido e preencher os valores iniciais correspondentes. O principal processo de operação é aplicar primeiro ao espaço de PCB do sistema para alocar um PCB ocioso e, em seguida, inicializar a entrada de PCB do processo filho de acordo com os parâmetros fornecidos pelo processo pai e, finalmente, retornar um nome interno de processo.
Parâmetros normalmente fornecidos: nome do processo (identificador externo) n, o estado inicial do processador (ou o valor inicial da cena em execução do processo, refere-se principalmente ao valor inicial de cada registro e palavra de status do programa) S0, o número de prioridade k0, o processo pai é atribuído ao filho A área de memória principal inicial M0 do processo e outras listas de recursos (tabelas de recursos múltiplos) R0, etc.
O trabalho de estabelecer primitivas de processo é aproximadamente descrito como:

procedure Create(n,S0,k0,M0,R0,acc)
begin
	i:=Get New Internal Name(n); // 调用查找进程名过程,参数为进程外部名。查找对象为PCB集合,如果同名则返回出错信息
	Id(i):=n;
	Priority(i):=k0;
	Cpustate(i):=S0;
	Main Store(i):=M0;
	Resources(i):=R0;
	Status(i):='Readys'; // 设置为‘挂起就绪’
	Parent(i):=*;
	Set Accounting Data; // 在PCB中(或其他相应表中)建立记账信息,这也是调用‘记账过程’
	Insert(RL,i);
end.

Suspender primitivas de processo
só podem suspender a si mesmas ou a seus descendentes.
O processo de comando é descrito a seguir:

procedure Suspend(n,a);
begin
	i:=Get Internal Name(n);
	S:=Status(i);
	if	S="Running" then STOP(i);
	a:=COPY PCB(i)
	Status(i):=if a="Blockeda" then "blockeds" else "Readys";
	if	S="Running" then SCHEDULER // 调用调用程序SCHEDULER
end.

Unsuspend primitivas O
processo de dessuspensão é descrito a seguir:

procedure Resume(n);
begin
	i:=Get Internal Name(n);
	Status(i):=if Status(i)='Readys' then 'Readys' else 'Blockeda';
	if	Status(i)='Readya' then SCHEDULER
end.

Revogação de primitivas de processo Existem
duas estratégias para primitivas de revogação: 1) revogar apenas um processo com um identificador especificado (seu processo filho); 2) revogar um de seus processos filho e todos os descendentes do processo.
1) Isso destruirá a relação hierárquica da árvore de processos, fazendo com que o sistema deixe alguns processos isolados, perdendo o controle sobre eles. Portanto, 2) é geralmente adotado.
As primitivas de cancelamento geralmente são emitidas pelo processo pai ou ancestrais e não se cancelam sozinhas.
Uma descrição geral do primitivo:

procedure Destroy(n);
begin
	Sched:=false;
	i:=Get Internal Name(n);
	KILL(i);
	if Sched=true then SCHEDULER;
end(Destroy)
procedure KILL(i);
begin
	if Status(i)='Running' then
		begin STOP(I);
			  Sched:=true
		end
	REMOVE(Queue(i),i);
	for all S<- progeny(i) do KILL(S); //<-是数学集合元素中的属于
	for all r<- Resources(i) do RELEASE(r);
								RELEASE(PCB(i));
end(KILL)

Alterar o primitivo do número de prioridade do processo
Omitir

Sistema operacional e execução de controle de processo

levemente

Multithreading

Thread em nível de usuário KLT e thread ULT em nível de kernel

Para superar as deficiências dos métodos KLT puro e ULT puro e obter os benefícios desses dois métodos, é necessário combinar os dois métodos. Este é um sistema operacional baseado em multithreading. O kernel suporta o estabelecimento, agendamento e gerenciamento de vários threads. Ao mesmo tempo, o sistema oferece a conveniência de uma biblioteca de threads, permitindo que os aplicativos do usuário estabeleçam, planejem e gerenciem threads no nível do usuário.

Na discussão do texto, threads de nível de usuário, threads de nível de kernel, threads de usuário e threads de kernel freqüentemente aparecem. Na verdade, o encadeamento ULT no nível do usuário e o encadeamento KLT no nível do kernel são um conceito de gerenciamento , o que significa que o encadeamento é criado e gerenciado pelo usuário ou pelo kernel. Em termos gerais, a conta do thread está no kernel ou no aplicativo do usuário.
Cada thread específico no sistema tem apenas dois tipos:
(1) Thread do usuário: refere-se ao thread em execução no espaço de endereço do usuário, a maioria dos threads são threads do usuário.
(2) Thread do kernel: refere-se ao thread em execução no espaço do kernel, como sub-rotinas do kernel ou todos os manipuladores de interrupção e exceção implementados por threads, todos são threads do kernel.

Todos os threads de nível de usuário são threads de usuário. Todos os threads de nível de kernel podem ser threads de usuário ou threads de kernel, dependendo do espaço de endereço em que são executados.
Ou todos os manipuladores de interrupção e exceção são implementados por threads, são todos threads de kernel.

Todos os threads de nível de usuário são threads de usuário. Todos os threads de nível de kernel podem ser threads de usuário ou threads de kernel, dependendo do espaço de endereço em que são executados.

Acho que você gosta

Origin blog.csdn.net/MaoziYa/article/details/105719707
Recomendado
Clasificación