Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab2 / Lab2

.docx
Скачиваний:
6
Добавлен:
28.06.2021
Размер:
67.98 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

Федеральное государственное образовательное бюджетное учреждение

высшего профессионального образования

Московский технический университет связи и информатики

----------------------------------------------------------------------------------------------------

Кафедра Математической кибернетики и информационных технологий

ЛАБОРАТОРНАЯ РАБОТА № 2__

по дисциплине

ОПЕРАЦИОННЫЕ СИСТЕМЫ

на тему:

«Архитектура Windows»

Выполнил:

Проверил:

Королькова Т.В.

ст. пр. кафедры МКиИТ

Москва 2017

Цель работы: изучение архитектуры операционной системы Windows.

Ход работы: Определим количество процессов, потоков и дескрипторов в ОС в данный момент через Диспетчер задач.

Изменим данное значение, запуская на выполнение новое приложение.

Проценты работы в пользовательском, привилегированном режимах и времени бездействия приведены ниже:

Задание: При разработке приложения, решающего данные в задании задачи, были использованы следующие функции:

HANDLE CreateFile(

LPCTSTR lpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,

DWORD dwCreationDistribution,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile

);

Используется для создания объекта FILE на базе существующего файла.

HANDLE CreateFileMapping(

HANDLE hFile,

LPSECURITY_ATTRIBUTES lpFileMappingAttributes,

DWORD flProtect,

DWORD dwMaximumSizeHigh,

DWORD dwMaximumSizeLow,

LPCTSTR lpName

);

Создает объект файлового отображения File-mapping

LPVOID MapViewOfFile(

HANDLE hFileMappingObject,

DWORD dwDesiredAccess,

DWORD dwFileOffsetHigh,

DWORD dwFileOffsetLow,

DWORD dwNumberOfBytesToMap

);

Отображает объект файлового отображения в адресное пространство текущего процесса.

BOOL CloseHandle(

HANDLE hObject // дескриптор закрывамого объекта.

);

Закрывает объект ядра.

BOOL UnmapViewOfFile(

LPCVOID lpBaseAddress

);

Прекращает отображение объекта в адресное пространство текущего процесса.

Код программы:

#include <tchar.h>

#include <stdio.h>

#include <conio.h>

#include <cstring>

using namespace std;

void reverseText(const char*, char*);

void main()

{

HANDLE hFile;

HANDLE hMap;

char* pBuf;

hFile = CreateFile(TEXT("C:\\Users\\User\\Documents\\C++\\OSLab_2\\OSLab_2.txt"), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (hFile == INVALID_HANDLE_VALUE)

{

printf("Could not open OSLab_2");

return;

}

printf("Object 'File' has been created.\n");

hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, L"OSLab_2Map.txt");

if (hMap == NULL)

{

_tprintf(TEXT("Could not map view of file(%d). \n"), GetLastError());

CloseHandle(hMap);

return;

}

pBuf = (char *)MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0);

printf("File has been mapped\n");

char* pBufOut = new char[strlen(pBuf) +1];

reverseText(pBuf, pBufOut);

printf("Case has been changed\n");

CopyMemory((PVOID)pBuf, pBufOut, strlen(pBufOut));

printf("New file has been copied to existing file\n");

_getch();

delete[]pBufOut;

UnmapViewOfFile(pBuf);

CloseHandle(hMap);

CloseHandle(hFile);

system("pause");

}

void reverseText(const char* inBuffer, char* outBuffer)

{

for (inBuffer;*inBuffer!='\0';inBuffer++,outBuffer++)

{

if (islower(*inBuffer))

*outBuffer = toupper(*inBuffer);

else

*outBuffer = tolower(*inBuffer);

}

*outBuffer = '\0';

}

Соседние файлы в папке lab2