|
Реферат: Конфигурация аппаратных средств (Информатика)
К У Р С О В О Й П Р О Е К Т
по дисциплине «Архитектура ЭВМ»
тема: «Конфигурация аппаратных средств персонального компьютера»
2005
Задание
Написать программу определения аппаратной конфигурации персонального компьютера.
Содержание
Введение………………………………………………………………. 2 1. Теоретические сведения…………………………………………. 3 2. Выбор языка программирования………………………………. 6 3. Описание алгоритма работы программы……………………… 6 3.1. Сбор сведений………………………………………………… 6 3.2. Сравнение с информацией системного реестра…………. 7 3.3. Отображение полученной информации Интерфейс пользователя..………………………………………. 7 4. Текст программы………………………………………………… 8 Заключение……………………………………………………………17 Используемая литература………………………………………….. 18
Ведение
Общеизвестно, что системный блок современного компьютера состоит из отдельных модулей, объединённых в одно целое и выполняющих каждый свою , определённую функцию. На сегодняшний день появилось огромное количество аппаратных средств персональных компьютеров различных производителей, которые выполняют самые разные задачи: ввод информации, выполнение кода программ, вывод результатов работы и т.д. Порой становится важной возможность определения конфигурации при не имении на руках документации на установленное оборудование и без разборки системного блока. В этом случае приходят на помощь программы специально разработанные для решения подобного рода задач – программы определения конфигурации компьютера. Данная работа посвящена разработке именно такой программы. Программы, которая была бы способна воссоздать внутреннее устройство компьютера с классификацией модулей и информацией по каждому из них.
1. Теоретические сведения
Операционные системы Windows, начиная Windows ’95, имеют условную структуру называемую системным реестром, в которой содержится вся информация об оборудовании персонального компьютера и установленном на нём программном обеспечении, а также служебная, необходимая для оптимального функционирования самой системы и правильного выполнения программных компонентов.
Что такое системный реестр?
Системный реестр - база данных, которая сохраняет параметры настройки для 32 разрядных версий Microsoft Windows включая; Windows 95, 98 и NT. Он содержит информацию и параметры настройки для всех аппаратных средств, программ, пользователей, и свойств PC. Каждый раз, когда пользователь делает изменения в параметрах настройки Панели управления, или в ассоциациях файлов, системной настройке, или в установленном программном обеспечении, изменения отражаются и сохраняются в системном реестре.
Где находится системный реестр?
Физические файлы, которые составляют системный реестр, различаются в зависимости от версии Windows; в Windows 95 и 98 он содержится в двух скрытых файлах каталога Windows, называемыми USER.DAT и SYSTEM.DAT, в то время как в Windows NT файлы содержатся в каталоге "Windows/System32/Config".
Как можно редактировать системный реестр?
Редактор системного реестра (REGEDIT.EXE) включен в большинство версий Windows (хотя Вы не найдете его в меню "Пуск") он дает возможность просматривать, искать и редактировать данные в пределах системного реестра. Имеется несколько методов для запуска редактора, самый простой - нажать на кнопку "Пуск", затем выбрать Выполнить, дальше в поле "Открыть:" напечатать "regedit" и откроется редактор системного реестра. [pic]
Использование Regedit для изменения системного реестра Как только Regedit открыт, Вы заметите, что левую сторону занимает дерево с папками, а правую содержание выбранной папки.
Чтобы развернуть некоторую ветвь, нажмите на знак "плюс" [+] слева от любой папки, или дважды щелкните на папке. Для отображения содержание папки, нажмите на нужный ключ, и Вы увидите параметры, перечисленные на правой стороне. Вы можете добавить новый ключ или параметр, выбирая пункт «Создать», из меню «Правка», или щелкая правой кнопкой мыши. Так же Вы можете переименовать любой параметр и почти любой ключ тем же методом, что и переименовываете файлы; щелкните правой кнопкой мыши на объекте, и выберете «Переименовать», или нажмите на нем дважды (медленно), или нажмите F2 на клавиатуре. Наконец, Вы можете удалить ключ или параметр, выбирая его, и, нажимая «Delete» на клавиатуре, или щелкая правой кнопкой мыши на параметре, и выбирая «Удалить». Обратите внимание: Всегда резервируйте Ваш системный реестр перед созданием любых изменений в нем. Это даст Вам возможность не переустанавливать операционную систему в случае неправильных действий. Гораздо лучше перестраховаться, чем потом жалеть! Системный реестр имеет иерархическую структуру, которая подобна структуре каталогов на Вашем жестком диске, а Regedit подобен Проводнику Windows. Каждая главная ветвь (обозначенная значком папки в редакторе системного реестра, см. ниже) называется Корневой и содержит ключи. Каждый ключ может содержать другие ключи (иногда называемые подключами), а также параметры. Параметры содержат фактическую информацию, сохраненную в системном реестре. Имеется три типа параметров; Строковые, Двоичные, и DWORD. Реестр имеет шесть главных ветвей, каждая из которых содержит определенную часть информации. Это следующие ветви: · HKEY_CLASSES_ROOT: Эта ветвь содержит все типы Ваших ассоциаций к файлам, информацию об OLE и данные по ярлыкам. · HKEY_CURRENT_USER: Эта ветвь связана с ветвью HKEY_USERS, и соответствует пользователю, работающему в настоящее время на PC.
· HKEY_LOCAL_MACHINE: Эта ветвь содержит определенную информацию о типах аппаратных средств, программного обеспечения, и других настройках на данном PC, эта информация используется для всех пользователей, которые работают на этом компьютере. · HKEY_USERS: Эта ветвь содержит индивидуальные настройки каждого пользователя компьютера, каждый пользователь представлен под ключом SID, расположенном под главной ветвью. · HKEY_CURRENT_CONFIG: Эта ветвь связана с ветвью HKEY_LOCAL_MACHINE, и соответствует текущей аппаратной конфигурации.
· HKEY_DYN_DATA: Эта ветвь связана с частью HKEY_LOCAL_MACHINE, и служит для использования особенностей Plug-&-Play в Windows, этот раздел динамически изменятся, когда устройства добавляются и удаляются из системы. Импорт и Экспорт параметров настройки системного реестра
Полезной особенностью Редактора системного реестра является способность импортировать и экспортировать параметры системного реестра в текстовый файл, этот текстовый файл имеет расширение .REG, может быть сохранен а затем использован другими людьми для боле простого изменения локальных параметров системного реестра. Вы можете просмотреть содержание этих текстовых файлов, экспортируя ключ в испытательный файл и открыв его в Блокноте. В Редакторе системного реестра выберете ключ, затем из меню "Реестр" выберете "Экспорт файл реестра ... ", укажите имя сохраняемого файла. Если Вы откроете этот файл в Блокноте, то увидите текст, подобный приведенному ниже: REGEDIT4
[HKEY_LOCAL_MACHINESYSTEMSetup]
"SetupType"=dword:00000000
"CmdLine"="setup -newsetup"
"SystemPrefix"=hex:c5,0b,00,00,00,40,36,02
Содержание его весьма простое, REGEDIT4 указывает тип файла, [HKEY_LOCAL_MACHINESYSTEMSetup] указывает ключ, где находятся параметры, "SetupType" =dword:00000000 это параметр, часть записи указанная непосредственно после "=" определяется в зависимости от типа данных; Строковое, Двоичное, или DWORD. Отредактировав этот файл, Вы можете легко произвести изменения в системном реестре, для этого дважды щелкните на нем, или выберете "Импорт файла реестра,,," из меню "Реестр", и параметры будут добавлены в системный реестр. Вся информация об установленных компонентах и приложениях заносится в реестр при установке операционной системы и обновляется при каждом запуске компьютера, а потому является одним из источников получения данных о конфигурации. Анализ этих данных был взят за основу решения поставленной задачи.
2. Выбор языка программирования
Поскольку работа с реестром подразумевает выполнение задачи под управлением операционной системы Windows, то это обстоятельство повлияло на выбор языка программирования. Необходимо было также обратить внимание на удобство создания интерфейса и отображение всей информации в стандартном окне Windows. Все поставленные задачи в полной мере решались в среде Visual Basic. Она и была выбрана в качестве средства создания рассматриваемой программы.
3. Описание алгоритма работы программы
3.1. Сбор сведений
.Inf – файлы.
В папке Windows/INF собраны файлы, в которых находится информация об устанавливаемом оборудовании при инсталляции или загрузке операционной системы. И среди прочей служебной информации есть сведения о классе того или иного устройства, описываемого конкретным файлом. Все файлы этой папки мы просматриваем (.inf-файлы, в которых отсутствуют такие сведения нами не рассматриваются, а в программе пропускаются) и создаём список классов всех возможно установленных устройств.
3.2. Сравнение с информацией системного реестра
После того как получен список, каждый найденный класс проверяем на его присутствие в системном реестре и, если он обнаружен, то включаем счётчик возможно установленных устройств данного класса. При каждом пересчёте счётчика делаем обращение к реестру на признак присутствия устройства и, если ответ положительный , сохраняем информацию. Если же устройств данного класса в реестре не обнаружено, то переходим к следующему элементу списка до тех пор, пока не исчерпаем его весь. После отработки данной части алгоритма имеем распределённый по группам список всех установленных устройств и информацию по каждому из них.
Весь процесс сбора информации сопровождается выводом на экран окна «Сбор сведений» (рис.1), в котором динамически отображаются результаты поиска и идентификации.
3.3. Отображение полученной информации. Интерфейс пользователя
При разработке интерфейса основное внимание уделялось простоте использования и наглядности. Все возможные типы устройств, устанавливаемые в современных компьютерах, поделились на группы. В результате получилось 6 наименований:
. Процессор; . Системная плата; . Память; . Диски; . Адаптеры и др.устройства; . Устройства ввода/вывода.
Далее следовало создание формы в среде Visual Basic, на которой были размещены 6 кнопок (по одной на каждую из выделенных групп), окно просмотра информации по выбранной группе с линиями прокрутки и линейка быстрой помощи.
Внешний вид формы приведён на рисунке 2.
[pic]
Отображение информации.
По нажатию одной из кнопок вступает в работу соответствующая процедура обработки, которая производит подготовку и вывод нужной информации. В результате в окне справа появляется информация, касающаяся выбранной группы.
Линейка быстрой помощи
При наведении курсора мыши на каждую из кнопок в линейке быстрой помощи появляется информация её функции .
4. Текст программы
Ниже приводится текст разработанной программы:
Код формы HV1(HV1.frm):
Private Sub Form_Load() Progress.Show Call SB_Sveden Progress.Hide End Sub Private Sub Form_Unload(Cancel As Integer) End End Sub Private Sub Command1_Click() SubK$ = "HardwareDescriptionSystemCentralProcessor0" On Error GoTo Noread ProcID$ = HV1.RegCtrl1.RReadValue(HK$, SubK$, "Identifier") Noread: On Error Resume Next On Error GoTo Noread1 ProcMMX$ = HV1.RegCtrl1.RReadValue(HK$, SubK$, "MMXIdentifier") Noread1: On Error Resume Next On Error GoTo Noread2 VendorID$ = HV1.RegCtrl1.RReadValue(HK$, SubK$, "VendorIdentifier") Noread2: Err.Clear CpInst$ = "" If Coproc Then CpInst$ = "Сопроцессор встроенный" Box1 = ProcID$ & vbCrLf & ProcMMX$ & vbCrLf & VendorID$ & vbCrLf & " " & vbCrLf & CpInst$ On Error GoTo 0 End Sub
Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.Caption = "Информация о центральном процессоре." End Sub
Private Sub Command2_Click() Call B_Text(2) End Sub Private Sub Command2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.Caption = "Информация о системной плате." End Sub Private Sub Command3_Click() Dim clsMem As New clsMemorySnapshot Box1 = "Объём физической памяти : " & Format(clsMem.TotalMemory 1024, "###,###,###,###,##0") & " KB" & vbCrLf & "Свободно : " & Format(clsMem.FreeMemory 1024, "###,###,###,###,##0") & " KB*" & vbCrLf End Sub Private Sub Command3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.Caption = "Информация о памяти." End Sub
Private Sub Command4_Click() ms = MsgBox("Рекомендуется вставить диски во все дисководы.", vbOKCancel, "ВНИМАНИЕ!") GetDiskInfo Box1 = "" For Ka = 1 To n tc$ = Str((BytesPerSec(Ka) * SecsPerClus(Ka) * TotalNumOfClus(Ka) / 1000) / 1000) fc$ = Str((BytesPerSec(Ka) * SecsPerClus(Ka) * NumOfFreeClus(Ka) / 1000) / 1000) Box1 = Box1 & "Информация о диске: " & Drives(Ka) & vbCrLf & _ "Метка тома: " & VNBuffer(Ka) & vbCrLf & _ "Файловая система: " & vSysBuff(Ka) & vbCrLf & _ "Серийный номер: " & vSerialNum(Ka) & vbCrLf & _ "Тип диска: " & TypeOfDrive(Ka) & vbCrLf & _ "Общее количество кластеров: " & TotalNumOfClus(Ka) & vbCrLf & _ "Количество свободных кластеров: " & NumOfFreeClus(Ka) & vbCrLf & _ "Секторов в кластере: " & SecsPerClus(Ka) & vbCrLf & _ "Байтов в секторе: " & BytesPerSec(Ka) & vbCrLf & _ "Емкость: " & tc$ & "mb" & vbCrLf & _ "Свободно: " & fc$ & "mb" & vbCrLf & " " & vbCrLf Next End Sub Private Sub Command4_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.Caption = "Информация о дисках." End Sub
Private Sub Command5_Click() Call B_Text(5) End Sub Private Sub Command5_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.Caption = "Информация о установленных адаптерах (звук, видео, модем и т.д.)." End Sub Private Sub Command6_Click() Call B_Text(6) End Sub Private Sub Command6_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.Caption = "Информация о устройствах ввода/вывода (монитор, клавиатура, принтер и т.д.)." End Sub
Sub B_Text(Comm As Integer) Select Case Comm Case 2 l = 0 k = k0 Case 5 l = 2 k = k2 Case 6 l = 1 k = k1 End Select For i = 1 To k s$ = s$ + (Sv(l, i) & vbCrLf) Next i Box1 = s$ End Sub
Код формы Progress(Pr.frm):
Private Sub Form_Load() DrawWidth = 3 End Sub
Код модуля Module1(Hwm.bas):
Public Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long Public Sv(2, 1000) As String Public Coproc As Boolean Public X1, X2, Y1, dX As Integer Public k0 As Integer Public k1 As Integer Public k2 As Integer Public Const HK$ = "HKEY_LOCAL_MACHINE" Public cpuspd As Long Public FF As Boolean Public Drives(100) As String Public n Public Ka Public vSerialNum(100) As Long Public vCompLen(100) As Long Public vFlags(100) As Long Public vSysBuff(100) As String Public vSysSize(100) As Long Public SecsPerClus(100) As Long Public BytesPerSec(100) As Long Public NumOfFreeClus(100) As Long Public TotalNumOfClus(100) As Long Public TypeOfDrive(100) As String Public VNBuffer(100) As String Public VNSize(100) As Long Public Const DRIVE_CDROM = 5 Public Const DRIVE_FIXED = 3 Public Const DRIVE_RAMDISK = 6 Public Const DRIVE_REMOTE = 4 Public Const DRIVE_REMOVABLE = 2
Sub SB_Sveden() Dim mDir(1000), mDir1, mStr, mDDir(100) As String Dim mClass, nClass(1000) As String Dim s, s1 As String Dim a As Integer X1 = Progress.Line1.X1: X2 = Progress.Line1.X2 Y1 = Progress.Line1.Y1 ChDir ("C:WINDOWSINF") mDDir(0) = "C:WindowsINF" mDTMP = Dir(mDDir(0), vbDirectory) i = 0 Do While mDTMP "" If mDTMP "." And mDTMP ".." Then If (GetAttr(mDDir(0) & mDTMP) And vbDirectory) = vbDirectory Then i = i + 1: mDDir(i) = mDTMP End If End If mDTMP = Dir Loop On Error GoTo EndFindINF For j = 1 To i mDir1 = Dir("C:WindowsINF" + mDDir(j) + "*.inf") While mDir1 "" a = a + 1 mDir(a) = mDDir(0) + mDDir(j) + "" + mDir1 mDir1 = Dir() Wend Next j mDir1 = Dir("C:WINDOWSINF*.inf") While mDir1 "" a = a + 1 mDir(a) = mDDir(0) + mDir1 mDir1 = Dir() Wend EndFindINF: Err.Clear dX = (X2 - X1) / a For i = 1 To a On Error GoTo 0 Open mDir(i) For Input As #1 XE = X1 + (dX * i) Progress.Line (X1, Y1)-(XE, Y1), &H8000000D f = 0 sClFind: If Not (EOF(1)) And f = 0 Then Input #1, mClass If Mid(mClass, 1, 5) = "Class" And (Mid(mClass, 6, 1) = "=" Or Mid(mClass, 6, 1) = " ") Then a1 = a1 + 1: f = 1 mClass = Mid(mClass, 7) For j = 1 To Len(mClass) mStr = Mid(mClass, j, 1) If mStr " " And mStr "=" And mStr Chr(34) Then nClass(a1) = nClass(a1) + mStr Next j For j = 1 To a1 - 1 s = StrConv(nClass(a1), vbLowerCase) s1 = StrConv(nClass(j), vbLowerCase) If s = s1 Then nClass(a1) = "": a1 = a1 - 1: f = 0: Exit For Next j If f = 1 Then If nClass(a1) "DiskDrive" And nClass(a1) "NetClient" And nClass(a1) "NetService" And nClass(a1) "NetTrans" And nClass(a1) "CDROM" Then Call FClassCH(nClass(a1)) End If Else: GoTo sClFind End If End If Close #1 Next i End Sub
Sub FClassCH(FClass As String) Num$ = "0000" For i = 0 To 1999 tmp$ = Mid(Str(i), 2) tmp1 = Len(tmp$) Mid(Num$, 6 - tmp1, tmp1) = tmp$ SubK$ = "SystemCurrentControlSetServicesClass" + FClass + Num$ On Error GoTo NoDev DDesc$ = HV1.RegCtrl1.RReadValue(HK$, SubK$, "DriverDesc") On Error GoTo 0 If i = 0 Then DD$ = " " Call GroupDev(FClass, DD$, "") SubK$ = "SystemCurrentControlSetServicesClass" + FClass DD$ = HV1.RegCtrl1.RReadValue(HK$, SubK$, "") Call GroupDev(FClass, DD$, "") DD$ = String(70, "-") Call GroupDev(FClass, DD$, "") End If If DDesc$ "Coprocessor" And DDesc$ "Сопроцессор" Then Call GroupDev(FClass, DDesc$, Num$) Else Coproc = True NoDev: If Err 0 Then Exit For Next i Err.Clear End Sub
Sub GroupDev(DClass, DDsc, Nm As String) If DClass = "System" Or DClass = "fdc" Or DClass = "hdc" Or DClass = "Infrared" Then k0 = k0 + 1: Sv(0, k0) = DDsc: Exit Sub If DClass = "MTD" Or DClass = "MultiFunction" Or DClass = "PCMCIA" Or DClass = "Ports" Then k0 = k0 + 1: Sv(0, k0) = DDsc: Exit Sub If DClass = "USB" Then k0 = k0 + 1: Sv(0, k0) = DDsc: Exit Sub If DClass = "Monitor" Or DClass = "Keyboard" Or DClass = "Mouse" Or DClass = "Printer" Then k1 = k1 + 1: Sv(1, k1) = DDsc: Exit Sub SubK$ = "SystemCurrentControlSetServicesClass" + DClass + Nm On Error GoTo NoMD MDId$ = HV1.RegCtrl1.RReadValue("HKEY_LOCAL_MACHINE", SubK$, "MatchingDeviceId") On Error GoTo 0 If Mid(MDId$, 1, 3) = "PCI" Then DDsc = "(PCI) " + DDsc If Mid(MDId$, 1, 6) = "ISAPNP" Then DDsc = "(ISA) " + DDsc NoMD: k2 = k2 + 1: Sv(2, k2) = DDsc Err.Clear End Sub
Sub GetDiskInfo() n = 0 For i = 65 To 90 If GetDriveType(Chr$(i) & ":" & "") 1 Then n = n + 1: Drives(n) = Chr$(i) & ":" & "" Next i For i = 1 To n Call GetDiskFreeSpace(Drives(i), SecsPerClus(i), BytesPerSec(i), NumOfFreeClus(i), TotalNumOfClus(i)) Select Case GetDriveType(Drives(i)) Case DRIVE_CDROM TypeOfDrive(i) = "CD-ROM" Case DRIVE_REMOVABLE TypeOfDrive(i) = "Floppy disk" Case DRIVE_FIXED TypeOfDrive(i) = "Hard disk drive" Case DRIVE_RAMDISK TypeOfDrive(i) = "Virtual disk" Case DRIVE_REMOTE TypeOfDrive(i) = "Net disk" Case Else End Select Next For i = 1 To n VNBuffer(i) = Space$(255) VNSize(i) = 255 vSysBuff(i) = Space$(255) vSysSize(i) = 255 vFlags(i) = 0 vCompLen(i) = 255 vSerialNum(i) = 255 lRet = GetVolumeInformation(Drives(i), VNBuffer(i), VNSize(i), vSerialNum(i), vCompLen(i), vFlags(i), vSysBuff(i), vSysSize(i)) If lRet = 1 Then VNBuffer(i) = Left$(VNBuffer(i), Len(RTrim$(VNBuffer(i))) - 1): vSysBuff(i) = Left$(vSysBuff(i), Len(RTrim$(vSysBuff(i))) - 1): vSerialNum(i) = Left$(vSerialNum(i), Len(RTrim$(vSerialNum(i))) - 1) If lRet = False Then VNBuffer(i) = "None": vSysBuff(i) = "None" Next End Sub
Код класса clsMemorySnapshot(Memory.cls)
Option Explicit Private Type MEMORYSTATUS dwLength As Long dwMemoryLoad As Long dwTotalPhys As Long dwAvailPhys As Long dwTotalPageFile As Long dwAvailPageFile As Long dwTotalVirtual As Double dwAvailVirtual As Double End Type
Private Declare Sub GlobalMemoryStatus Lib "kernel32" _ (lpBuffer As MEMORYSTATUS) Private mmemMemoryStatus As MEMORYSTATUS Public Property Get FreeMemory() As Long FreeMemory = mmemMemoryStatus.dwAvailPhys End Property Public Property Get TotalMemory() As Long TotalMemory = mmemMemoryStatus.dwTotalPhys End Property Public Property Get TotalVirtualMemory() As Double TotalVirtualMemory = mmemMemoryStatus.dwTotalVirtual End Property Public Property Get AvailableVirtualMemory() As Double AvailableVirtualMemory = mmemMemoryStatus.dwAvailVirtual End Property Private Sub Class_Initialize() mmemMemoryStatus.dwLength = Len(mmemMemoryStatus) GlobalMemoryStatus mmemMemoryStatus End Sub Public Sub Refresh() GlobalMemoryStatus mmemMemoryStatus End Sub
Заключение
Программа полностью выполнила все поставленные перед ней задачи при тестировании, что позволяет сделать вывод о её пригодности для определения конфигурации компьютера и использования в качестве дополнения к, уже имеющимся в составе операционной системы Windows , средствам получения информации об аппаратных средствах с более простым и удобным интерфейсом.
Используемая литература
Реферат на тему: Наблюдение за ресурсами, пользователями ОС UNIX. Передача сообщений. Управление ресурсами
Министерство образования РФ Липецкий государственный педагогический университет Факультет экономики и информатики Кафедра информатики
Лабораторная работа №3 Наблюдение за ресурсами, пользователями ОС UNIX. Передача сообщений. Управление ресурсами.
Выполнили студенты
1 курса группы ПИЭ-02-1
Ехлаков Олег и
Черепнин Василий
Научный руководитель Пашков Сергей Анатольевич
Липецк 2003
Пользователь
С самого начала ОС UNIX замышлялась как интерактивная система. Другими словами, UNIX предназначен для терминальной работы. Чтобы начать работать, человек должен "войти" в систему, введя со свободного терминала свое учетное имя (account name) и, возможно, пароль (password). Человек, зарегистрированный в учетных файлах системы, и, следовательно, имеющий учетное имя, называется зарегистрированным пользователем системы. Регистрацию новых пользователей обычно выполняет администратор системы. Пользователь не может изменить свое учетное имя, но может установить и/или изменить свой пароль. Пароли хранятся в отдельном файле в закодированном виде. Не забывайте свой пароль, снова узнать его не поможет даже администратор! Все пользователи ОС UNIX явно или неявно работают с файлами. Файловая система ОС UNIX имеет древовидную структуру. Промежуточными узлами дерева являются каталоги со ссылками на другие каталоги или файлы, а листья дерева соответствуют файлам или пустым каталогам. Каждому зарегистрированному пользователю соответствует некоторый каталог файловой системы, который называется "домашним" (home) каталогом пользователя. При входе в систему пользователь получает неограниченный доступ к своему домашнему каталогу и всем каталогам и файлам, содержащимся в нем. Пользователь может создавать, удалять и модифицировать каталоги и файлы, содержащиеся в домашнем каталоге. Потенциально возможен доступ и ко всем другим файлам, однако он может быть ограничен, если пользователь не имеет достаточных привилегий.
Интерфейс пользователя
Традиционный способ взаимодействия пользователя с системой UNIX основывается на использовании командных языков (правда, в настоящее время все большее распространение получают графические интерфейсы). После входа пользователя в систему для него запускается один из командных интерпретаторов (в зависимости от параметров, сохраняемых в файле /etc/passwd). Обычно в системе поддерживается несколько командных интерпретаторов с похожими, но различающимися своими возможностями командными языками. Общее название для любого командного интерпретатора ОС UNIX - shell (оболочка), поскольку любой интерпретатор представляет внешнее окружение ядра системы. Вызванный командный интерпретатор выдает приглашение на ввод пользователем командной строки, которая может содержать простую команду, конвейер команд или последовательность команд. После выполнения очередной командной строки и выдачи на экран терминала или в файл соответствующих результатов, shell снова выдает приглашение на ввод командной строки, и так до тех пор, пока пользователь не завершит свой сеанс работы путем ввода команды logout или нажатием комбинации клавиш Ctrl-d. Командные языки, используемые в ОС UNIX, достаточно просты, чтобы новые пользователи могли быстро начать работать, и достаточно мощны, чтобы можно было использовать их для написания сложных программ. Последняя возможность опирается на механизм командных файлов (shell scripts), которые могут содержать произвольные последовательности командных строк. При указании имени командного файла вместо очередной команды интерпретатор читает файл строка за строкой и последовательно интерпретирует команды.
Привилегированный пользователь
Ядро ОС UNIX идентифицирует каждого пользователя по его идентификатору (UID - User Identifier), уникальному целому значению, присваиваемому пользователю при регистрации в системе. Кроме того, каждый пользователь относится к некоторой группе пользователей, которая также идентифицируется некоторым целым значением (GID - Group IDentifier). Значения UID и GID для каждого зарегистрированного пользователя сохраняются в учетных файлах системы и приписываются процессу, в котором выполняется командный интерпретатор, запущенный при входе пользователя в систему. Эти значения наследуются каждым новым процессом, запущенным от имени данного пользователя, и используются ядром системы для контроля правомощности доступа к файлам, выполнения программ и т.д. Понятно, что администратор системы, который, естественно, тоже является зарегистрированным пользователем, должен обладать большими возможностями, чем обычные пользователи. В ОС UNIX эта задача решается путем выделения одного значения UID (нулевого). Пользователь с таким UID называется суперпользователем (superuser) или root. Он имеет неограниченные права на доступ к любому файлу и на выполнение любой программы. Кроме того, такой пользователь имеет возможность полного контроля над системой. Еще одним отличием суперпользователя от обычного пользователя ОС UNIX является то, что на суперпользователя не распространяются ограничения на используемые ресурсы. Для обычных пользователей устанавливаются такие ограничения как максимальный размер файла, максимальное число сегментов разделяемой памяти, максимально допустимое пространство на диске и т.д. Суперпользователь может изменять эти ограничения для других пользователей, но на него они не действуют.
Программы
ОС UNIX одновременно является операционной средой использования существующих прикладных программ и средой разработки новых приложений. Новые программы могут писаться на разных языках (Фортран, Паскаль, Модула, Ада и др.). Однако стандартным языком программирования в среде ОС UNIX является язык Си (который в последнее время все больше заменяется на Си++).
Выполняемая программа может быть запущена в интерактивном режиме как команда shell или выполнена в отдельном процессе, образуемом уже запущенной программой.
Процессы
Процесс в ОС UNIX - это программа, выполняемая в собственном виртуальном адресном пространстве. Когда пользователь входит в систему, автоматически создается процесс, в котором выполняется программа командного интерпретатора. Если командному интерпретатору встречается команда, соответствующая выполняемому файлу, то он создает новый процесс и запускает в нем соответствующую программу, начиная с функции main. Эта запущенная программа, в свою очередь, может создать процесс и запустить в нем другую программу (она тоже должна содержать функцию main) и т.д. Для образования нового процесса и запуска в нем программы используются два системных вызова (примитива ядра ОС UNIX) - fork() и exec (имя- выполняемого-файла). Системный вызов fork приводит к созданию нового адресного пространства, состояние которого абсолютно идентично состоянию адресного пространства основного процесса (т.е. в нем содержатся те же программы и данные).
Управление устройствами
Управление внешними устройствами - это одна из важнейших функций любой операционной системы. Система должна обеспечивать эффективный и удобный доступ к периферийным устройствам, а также обеспечивать возможность унифицированной разработки программного обеспечения для вновь подключаемых внешних устройств. Рассмотрим, как эта проблема решается в ОС UNIX.
Устройство как специальный файл
Для доступа к внешним устройствам в ОС UNIX используется универсальная абстракция файла. Помимо настоящих файлов (обычных файлов или каталогов), которые реально занимают память на магнитных дисках, файловая система содержит так называемые специальные файлы, для которых, как и для настоящих файлов, отводятся отдельные i-узлы, но которым на самом деле соответствуют внешние устройства. Это решение позволяет естественным образом работать в одном и том же интерфейсе с любым файлом или внешним устройством. (На самом деле, в некоторых случаях нестандартных внешних устройств, приходится выходить за пределы стандартного интерфейса).
Драйверы устройств
Любому программисту должно быть ясно, что простое объявление внешнего устройства специальным файлом не даст возможности работать с этим устройством, если не создан и соответствующим образом не подключен к системе специальный программный код, соответствующий специфике данного устройства. Как и в большинстве современных операционных систем, такого рода программный код в ОС UNIX называется драйвером устройства (в этом контексте слово драйвер лучше всего понимать в значении "управляющий"). Для профессионалов в области операционных систем драйверы ОС UNIX, в сущности, не представляют ничего нового. По-простому говоря, в любой системе драйвер устройства - это многовходовой программный модуль со своими статическими данными, который умеет инициировать работу с устройством, выполнять заказываемые пользователем обмены (на ввод или вывод данных), терминировать работу с устройством и обрабатывать прерывания от устройства. Однако, в любой операционной системе имеется своя технология разработки драйверов. В частности, в ОС UNIX различаются символьные, блочные и потоковые драйверы. Последний момент, на который мы хотим обратить внимание в этом пункте, состоит в том, что (опять же, как и в большинстве развитых операционных систем) в ОС UNIX возможны два способа включения драйвера в состав ядра ОС. Первый способ состоит в полном включении драйвера в состав ядра на стадии генерации системы (т.е. драйвер статически объявляется частью ядра системы). Второй способ позволяет обойтись минимальным количеством статических объявлений на стадии генерации ядра (фактически, обеспечиваются лишь необходимые элементы статических таблиц). В любой момент работы системы такой драйвер может быть динамически загружен в ядро системы. После появления (статического или динамического) в ядре ОС UNIX драйверы всех разновидностей функционируют единообразно.
Внешний и внутренний интерфейсы устройств
Независимо от типа файла (обычный файл, каталог, связь или специальный файл) пользовательский процесс может работать с файлом через стандартный интерфейс, включающий системные вызовы open, close, read и write. Ядро само распознает, нужно ли обратиться к его стандартным функциям или вызвать подпрограмму драйвера устройства. Другими словами, если процесс пользователя открывает для чтения обычный файл, то системные вызовы open и read обрабатываются встроенными в ядро подпрограммами open и read соответственно. Однако, если файл является специальным, то будут вызваны подпрограммы open и read, определенные в соответствующем драйвере устройства.
Распределенные файловые системы
Основная идея распределенной файловой системы состоит в том, чтобы обеспечить совместный доступ к файлам локальной файловой системы для процессов, которые, вообще говоря, выполняются на других компьютерах. Эта идея может быть реализована многими разными способами, однако в среде ОС UNIX все известные подходы основываются на монтировании удаленной файловой системы к одному из каталогов локальной файловой системы. После выполнения этой процедуры файлы, хранимые в удаленной файловой системе, доступны процессам локального компьютера точно таким же образом, как если бы они хранились на локальном дисковом устройстве. На рисунке 1 приведен пример, в котором два подкаталога удаленной файловой системы-сервера (share и X11) монтируются к двум (пустым) каталогам файловой системы-клиента. [pic] Рис. 1. Схема монтирования удаленной файловой системы В принципе, такая схема обладает и достоинствами, и недостатками. К достоинствам, конечно, относится то, что при работе в сети можно экономить дисковое пространство, поддерживая совместно используемые информационные ресурсы только в одном экземпляре. Но, с другой стороны, пользователи удаленной файловой системы неизбежно будут работать с удаленными файлами существенно более медленно, чем с локальными. Кроме того, реальная возможность доступа к удаленному файлу критически зависит от работоспособности сервера и сети. Заметим, что распространенные в мире UNIX сетевые файловые системы NFS (Network File System - сетевая файловая система) и RFS (Remote File Sharing - совместное использование удаленных файлов) являются достаточно тщательно спроектированными и разработанными продуктами, во многом сглаживающими отмеченные недостатки.
Некоторые команды ОС Unix.
WHOAMI - идентификация пользователя ( информация о текущем сеансе ). ОС Unix позволяет манипулировать файлами и директориями различными способами. Можно копировать, уничтожать, переименовывать, записывать, распечатывать и разделять файлы в ЛВС. Есть также определённая система прав доступа к файлам и директориям. Как файлы так и директории на сервере в ЛВС под управлением ОС Unix имеют атрибуты. Эти атрибуты могут отменять права, предоставленные пользователям в ЛВС. CHMOD – изменение прав доступа пользователям, группам, всем остальным. 1 – r, 2 – w, 4 – x. Для разрешения различных действий, записывается сумма присвоенных атрибутам значений. Например, команда chmod 777 Virt устанавливает для всех полный доступ к директории Virt. MESG Y – включает message. WRITE USER – отправляет сообщение на указанный терминал.
| |