Управление памятью в ОС UNIX и Windows по курсу Операционные системы
Работа добавлена на сайт samzan.net: 2016-06-09
Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
от 25%
Подписываем
договор
Санкт-Петербургский государственный политехнический университет
Факультет технической кибернетики
Кафедра информационной безопасности компьютерных систем
ОТЧЕТ
по лабораторной работе №4
«Управление памятью в ОС UNIX и Windows»
по курсу «Операционные системы»
Студент:
|
Никитин А. С.
|
|
гр. 2088/1
|
Преподаватель:
|
Степанова Т. В.
|
Санкт-Петербург 2011
1. Формулировка задания
Цель работы изучение аспектов организации работы с внутренней и внешней памятью в ОС семейств Unix и Windows.
2. Использованные теоретические сведения
3. Результаты работы
3.1. Выполнение индивидуального задания
- Напишите набор программ, удовлетворяющих теоретическому понятию оверлея. Каждый оверлей должен осуществлять какие-либо вычисления, выводя результаты в терминал, далее он передает управление другому оверлею из комплекса. Всего в комплексе должно быть не менее 4 оверлеев.
Все оверлеи почти одинаковы, за исключением последнего, который не загружает новый оверлей, а просто завершает работу.
#include <stdio.h>
int main(int argc, char **argv) {
int i;
puts("Overlay #1");
for (i = 0; i < 10; i++) printf("%d ", i); //Оверлеи по очереди //выводят числа от 0 до 39
puts("\b");
execve("overlay2", NULL, NULL); //Запуск следующего оверлея
return 0;
}
- Напишите программу, которая будет измерять среднее время доступа к внутренней и внешней памяти (чтение данных из оперативной памяти и с внешней памяти, в качестве которой выступает CD-ROM диск). Сравните и обоснуйте полученные результаты.
#include <stdio.h>
#include <time.h>
#include "windows.h"
#define N 134217728 //Будет производиться чтение 128 Мб из файла
int main(int argc, char **argv) {
HANDLE file;
char *src, *dest;
long int tm;
int rd;
file = CreateFileA("E:\\Sleep.flac", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //Открытие файла
if (file == INVALID_HANDLE_VALUE) return 0;
puts("File opened");
//Далее идёт выделение памяти под два буфера, в один из которых будет
//прочитан файл, а во второй будет скопировано содержимое первого
src = (char *) GlobalAlloc(GPTR, N*sizeof(char));
if (src == NULL) {
CloseHandle(file);
return 0;
}
dest = (char *) GlobalAlloc(GPTR, N*sizeof(char));
if (dest == NULL) {
CloseHandle(file);
GlobalFree(src);
return 0;
}
puts("Memory allocated");
tm = clock();
//Чтение файла
ReadFile(file, (LPVOID) src, N*sizeof(char), (PDWORD) &rd, NULL);
tm = clock() - tm;
printf("File read - %ld ms\n", tm);
CloseHandle(file); //Закрытие файла
tm = clock();
//Копирование памяти
CopyMemory((PVOID) dest, (PVOID) src, (SIZE_T) N*sizeof(char));
tm = clock() - tm;
printf("Memory copied - %ld ms\n", tm);
GlobalFree(src); //Освобождение памяти
GlobalFree(dest);
return 0;
}
|
Чтение с CD
|
Чтение из памяти
|
Первый запуск
|
34485 мс
|
93 мс
|
Второй запуск
|
140 мс
|
94 мс
|
После первого запуска программы, данные с CD-диска кешируются, и если сразу запустить программу второй раз, то чтение пройдёт гораздо быстрее.
3.2. Ответы на контрольные вопросы
- Где хранится адрес таблицы сегментов?
Адрес таблицы сегментов хранится в дескрипторе процесса.
- Предположим, что в адресном пространстве процесса располагаются таблицы используемых процессом сегментов и страниц. Каким образом ядро может выгрузить это пространство из памяти?
Сначала выгружаются все страницы и сегменты, кроме тех, в которых хранятся таблицы. После этого можно выгрузить таблицы, но в дескрипторе процесса необходим дополнительный параметр, указывающий на факт выгрузки таблиц. После этого, при необходимости доступа к какой-либо странице, ядро сможет сначала загрузить таблицу, а потом необходимую страницу.
- Что следует предпринять программе обработки отказов в том случае, если в системе исчерпаны страницы памяти?
Необходимо выбрать одну из страниц, и выгрузить её. Как правило это страницы, к которым было меньше всего обращений за какой-то промежуток времени, или к которым дольше всего не было обращений.
4. Выводы
Механизмы, использующиеся для работы с памятью в ОС UNIX и Windows, повышают эффективность работы процессов, а также предоставляют некоторую свободу для программиста в реализации наиболее эффективной, по его мнению, работы с памятью его программы.
Приложение
Исходные тексты программ