Файл: Процессы в операционной системе Linux.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.11.2023

Просмотров: 39

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

САМАРКАНДСКИЙ ФИЛИАЛ ТАШКЕНТСКОГО УНИВЕРСИТЕТА

ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ ИМЕНИ МУХАММАДА АЛЬ-ХОРАЗМИЙ

Лабораторная работа 4

Кафедра: “Компьютер инжиниринг.”

По предмету: Управление  Linux серверами.
Тема: Процессы в операционной системе Linux
Выполнил: Стедент 20 – 09 группы, Баронов Ш.

Проверил: Нормурадов У .

Самарканд 2023

Лабораторная работа № 4.

Процессы в операционной системе Linux

Цель работы: изучение процессов в операционной системе Linux. Лабораторная работа посвящена процессам операционной системы Linux. Поскольку администрирование операционной системы в конечном счете сводится к управлению процессами. Каждый раз при запуске программы на выполнение создается процесс. Процессом называется выполняемая в данный момент программа или ее потомки. Каждый процесс запускается от имени какого-то пользователя. Процессы, которые стартовали при загрузке, обычно выполняются от имени пользователей root или nobody. Каждый пользователь может управлять поведением процессов, им запущенных. При этом пользователь root может управлять всеми процессами – как запущенными от его имени, так и процессами, порожденными другими пользователями операционной системы. Управление процессами осуществляется с помощью утилит, а также посредством некоторых команд командной оболочки shell. Каждый процесс в системе имеет уникальный номер – идентификационный номер процесса (Process Identification, PID). Этот номер используется ядром операционной системы, а также некоторыми утилитами для управления процессами.

Выполнение процесса на переднем плане и в фоновом режиме. Процессы могут выполняться на переднем плане (foreground) — режим по умолчанию и в фоновом режиме (background). На переднем плане в каждый момент для текущего терминала может выполняться только один процесс. Однако пользователь может перейти в другой виртуальный терминал и запустить на выполнение еще один процесс, а на другом терминале еще один и т. д. Процесс переднего плана – это процесс, с которым взаимодействует пользователь. Этот процесс получает информацию с клавиатуры (стандартный ввод) и посылает результаты на экран (стандартный вывод).


Фоновый процесс после своего запуска благодаря использованию специальной команды командной оболочки отключается от клавиатуры и экрана, т. е. не ожидает ввода данных со стандартного ввода и не выводит информацию на стандартный вывод, а командная оболочка не ожидает окончания запущенного процесса, что позволяет пользователю немедленно запустить еще один процесс. Обычно фоновые процессы требуют очень большого времени для своего завершения и не требуют вмешательства пользователя во время существования процесса. К примеру, компиляция программ или архивирование большого объема информации – кандидаты номер один для перевода процесса в фоновый режим. Процессы могут быть отложенными. Отложенный процесс – это процесс, который в данный момент не выполняется и временно остановлен. После того как процесс остановлен, он может быть продолжен как на переднем плане, так и в фоновом режиме. Возобновление приостановленного процесса не изменит его состояния – при возобновлении он начнется с того места, на котором был приостановлен. Для выполнения программы в режиме переднего плана достаточно просто набрать имя программы в командной строке и запустить ее на выполнение. После этого вы можете работать с программой. Для запуска программы в качестве фонового процесса достаточно набрать в командной строке имя программы и в конце добавить знак амперсанта (&), отделенный пробелом от имени программы и ее параметров командной строки, если таковые имеются. Затем программа запускается на выполнение.

Задание

  1. Запустите программу shell в фоновом режиме с подавлением потока вывода.

  2. Проверьте состояния процессов, воспользовавшись командой jobs.

Моя программа делает конвертацию текстовой строки в hex формат за таблицей ASCII. После чего идет процедура logicOperEnd где от первого и второго символа массива outputString отнимается 20 для того чтобы (если символ в нижнем регистре) перейти в его hex формат верхнего регистра. После чего я не могу понять как мне реализовать конвертацию hex формата верхнего регистра в dec формат.

Код:

.model small

.stack 100h

.data

input_msg db 'Vvedi chto-nibud:', 13, 10, '$'

max_len_buf db 124

len_buf db 0

buf db 121 dup(0)

output_msg db 'hex:', 13, 10

outpString db 364 dup(' ')

hex_table db '0123456789ABCDEF'

errF db '*** Error: Wrong Format ***', '$'

errL db '*** Error: Out of Limits ***', '$'

crlf db 0Dh,0Ah,'$'



.code

start:

mov ax, @data

mov ds, ax

xor ax, ax

call main

call exit2os

main proc near

call input

call convertString

call output

call outputCRLF

call logicOperEnd

call outputCRLF

call outputCRLF

call output

main endp

error_exit:

mov al, 1

call exit2os

input proc

mov ah, 9

mov dx, offset input_msg

int 21h

mov ah, 0Ah

mov dx, offset max_len_buf

int 21h

mov ah, 2

mov dl, 10

int 21h

ret

endp

convertString proc

xor di, di

xor si, si

mov bx, offset hex_table

xor ch, ch

mov cl, len_buf

convertLoop:

call convertByte

loop convertLoop

mov outpString[di], '$'

ret

endp

convertByte proc

mov ah, buf[si]

cmp ah, 3Fh ; Проверяем, находится ли символ в диапазоне от "00" до "3F"

ja validChar ; Если символ допустимый, переходим к validChar

call errFormat ; Если символ недопустимый, вызываем обработчик ошибки errFormat

ret

validChar:

mov al, ah

shr al, 4

xlat

mov outpString[di], al

inc di

mov al, ah

and al, 0Fh

xlat

mov outpString[di], al

inc di

inc di

inc si

; Проверка на программное переполнение

cmp di, 364

jbe convertByteEnd

; Если переполнение, вызываем обработчик ошибки errLimits

call errLimits

convertByteEnd:

ret

endp

outputCRLF proc

mov dx, offset crlf ; Загрузка адреса crlf в регистр DX

mov ah, 9 ; Функция 9 - вывод строки

int 21h ; Вызываем прерывание 21h для вывода строки

ret

outputCRLF endp

logicOperEnd proc near

mov di, offset outpString ; Загружаем адрес начала строки outpString в регистр DI

mov al, [di] ; Загружаем первый символ строки в регистр AL

sub al, 2 ; Вычитаем 2 из первого символа

mov ah, 0 ; Очищаем регистр AH

mov dl, al ; Переносим значение AL в DL для вывода

mov ah, 2 ; Функция 2 - вывод символа

int 21h ; Вызываем прерывание 21h для вывода символа

mov bx, ax ; Сохраняем первое значение в регистре BX

inc di ; Увеличиваем значение DI, чтобы перейти ко второму символу

mov al, [di] ; Загружаем второй символ строки в регистр AL

sub al, 0 ; Вычитаем 0 из второго символа

mov ah, 0 ; Очищаем регистр AH

mov dl, al ; Переносим значение AL в DL для вывода

mov ah, 2 ; Функция 2 - вывод символа

int 21h ; Вызываем прерывание 21h для вывода символа

mov [outpString], bl ; Сохраняем первое значение в начало outpString

mov [outpString+1], al ; Сохраняем второе значение в outpString+1

ret

logicOperEnd endp

convertDecimal proc

convertDecimal endp

errLimits proc near ; обработчик ошибки errLimits

lea dx, errL

call outputError

mov al, 2

call exit2os

errLimits endp

errFormat proc near ; обработчик ошибки errFormat

lea dx, errF

call outputError


mov al, 1

call exit2os

errFormat endp

exit2os proc near

mov ah, 4ch

int 21h

ret

exit2os endp

outputError proc

mov ah, 9

int 21h

ret

endp

output proc

mov dx, offset output_msg

mov ah, 9

int 21h

ret

endp

end start