lab2 / Lab2
.docx
ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
Федеральное государственное образовательное бюджетное учреждение
высшего профессионального образования
Московский технический университет связи и информатики
----------------------------------------------------------------------------------------------------
Кафедра Математической кибернетики и информационных технологий
ЛАБОРАТОРНАЯ РАБОТА № 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';
}