ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 39
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
САМАРКАНДСКИЙ ФИЛИАЛ ТАШКЕНТСКОГО УНИВЕРСИТЕТА
ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ ИМЕНИ МУХАММАДА АЛЬ-ХОРАЗМИЙ
Лабораторная работа 4
Кафедра: “Компьютер инжиниринг.”
По предмету: Управление Linux серверами.
Тема: Процессы в операционной системе Linux
Выполнил: Стедент 20 – 09 группы, Баронов Ш.
Проверил: Нормурадов У .
Самарканд 2023
Лабораторная работа № 4.
Процессы в операционной системе Linux
Цель работы: изучение процессов в операционной системе Linux. Лабораторная работа посвящена процессам операционной системы Linux. Поскольку администрирование операционной системы в конечном счете сводится к управлению процессами. Каждый раз при запуске программы на выполнение создается процесс. Процессом называется выполняемая в данный момент программа или ее потомки. Каждый процесс запускается от имени какого-то пользователя. Процессы, которые стартовали при загрузке, обычно выполняются от имени пользователей root или nobody. Каждый пользователь может управлять поведением процессов, им запущенных. При этом пользователь root может управлять всеми процессами – как запущенными от его имени, так и процессами, порожденными другими пользователями операционной системы. Управление процессами осуществляется с помощью утилит, а также посредством некоторых команд командной оболочки shell. Каждый процесс в системе имеет уникальный номер – идентификационный номер процесса (Process Identification, PID). Этот номер используется ядром операционной системы, а также некоторыми утилитами для управления процессами.
Выполнение процесса на переднем плане и в фоновом режиме. Процессы могут выполняться на переднем плане (foreground) — режим по умолчанию и в фоновом режиме (background). На переднем плане в каждый момент для текущего терминала может выполняться только один процесс. Однако пользователь может перейти в другой виртуальный терминал и запустить на выполнение еще один процесс, а на другом терминале еще один и т. д. Процесс переднего плана – это процесс, с которым взаимодействует пользователь. Этот процесс получает информацию с клавиатуры (стандартный ввод) и посылает результаты на экран (стандартный вывод).
Фоновый процесс после своего запуска благодаря использованию специальной команды командной оболочки отключается от клавиатуры и экрана, т. е. не ожидает ввода данных со стандартного ввода и не выводит информацию на стандартный вывод, а командная оболочка не ожидает окончания запущенного процесса, что позволяет пользователю немедленно запустить еще один процесс. Обычно фоновые процессы требуют очень большого времени для своего завершения и не требуют вмешательства пользователя во время существования процесса. К примеру, компиляция программ или архивирование большого объема информации – кандидаты номер один для перевода процесса в фоновый режим. Процессы могут быть отложенными. Отложенный процесс – это процесс, который в данный момент не выполняется и временно остановлен. После того как процесс остановлен, он может быть продолжен как на переднем плане, так и в фоновом режиме. Возобновление приостановленного процесса не изменит его состояния – при возобновлении он начнется с того места, на котором был приостановлен. Для выполнения программы в режиме переднего плана достаточно просто набрать имя программы в командной строке и запустить ее на выполнение. После этого вы можете работать с программой. Для запуска программы в качестве фонового процесса достаточно набрать в командной строке имя программы и в конце добавить знак амперсанта (&), отделенный пробелом от имени программы и ее параметров командной строки, если таковые имеются. Затем программа запускается на выполнение.
Задание
-
Запустите программу shell в фоновом режиме с подавлением потока вывода. -
Проверьте состояния процессов, воспользовавшись командой 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