Управление на паметта вWin16
| Информационни технологии | 2009-12-04 | 71 сваляния |
. 27 Управление на паметта вWin16. Сегментна организация. Съображения свързани с моделите памет. Преместваемост на кода в среда Winows-реализация. Пролог на EXE. формат за Windows. Сравнение с пролог под Dos. Модификация в пролога за различните типове функции. Управление на паметта. Принципи.
-
Когато имаме много instance на едно приложение всички използват общ код и ресурси, само данните са различни.
-
Елементите в паметта са преместваеми
-
Сегментите както и ресурсите най-често се зареждат при повикване.
-
Работи механизма за отстраняване на блоковете от паметта.
Сегментна организация на Windows приложен
В рамките на един сегмент указателите са near, а в различните сегменти са far (далечни). Ако работим с указатели трябва сегмента да го фиксираме и след като свършим работа да го освободим.
Приложенията, като са сегментно организирани имат поне следните сегменти:
- един кодов и един даннов(поне)
- поне един служебен сегмент с някакви служебни таблици този сегмент е общ за всички копия
- по един за всеки ресурс
Имаме 5 модела памет: small, medium, compact,large, huge
Small с 1 кодов и 1 даннов сегмент- модел за малки програми
Medium бързи програми с много кодови и един даннов сегмент,работи се с близки указатели към данни.
Compact 1 кодов и много даннови сегменти, но той не е много добър
Large модел с много кодови и с много даннови сегменти
Huge - много кодови и даннови сегменти, но работи с huge указтели. Това са далечни указатели след нормализация.
-
Ако използваме обем неинициализирани данни, добре е те да са заделят динамично от глобалния Help.
-
Ако програмата се нуждае от голям брой инициализирани данни нищо не пречи да ги заделим като ресурс.
Препоръчва се small и medium модела за 16 битова среда. Да се използват файл-указатели към данни. Да не се използват далечни указатели към функции, освен такива, които Windows си задава и тези , които се съставят в Windows програма.
Dos програмите съдържат в началото си код от вида:
mov ax, DGROUP
mov ds, ax
Освен това компилатора вмъква пролог и епилог части:
push bp
mov bp, sp
sub sp,x //име за локални променливи
Прологът и епилогът на всяка Windows far функция:
push ds //дата сегмента е единствения който сочи данните
pop ax
nop //празна операция
inc bp //basepointer
push bp
mov bp, sp
push ds
mov ds, ax
sub sp, x
Всяка far функция в паметта има един от следните видове пролози:
-
mov ax, ds
nop
За ф-ии викани от същата програма, но не от Windows
-
nop
nop
nop
За експлоатирани функции, които ще се викат само от Windows.
За пролога:
Когато линкера направи exe за всяка ф-ция стартовата точка се определя като преместваема. За всяка такава точка попълва служебна таблица, няколко байта служебна информация, която се запазва с exe-то. Когато стартираме exe-то за изпълнението тази служебна информация се прочита и се създава шлюз на зареждане за всяка входна точка. Ако функцията е качена или не в паметта , а в този шлюз и на зареждане са намира, винаги има актуален адрес на функцията в паметта. Windows сам го обновява. Ако не е в паметта вместо jump, следва прекъсване на процесораи функцията се качва в паметта. Който вика само far във Windows, трябва да зареди в ах данните.MakeProcInstance cъздава втори шлюз Instance Thunk. В него ах се зарежда с данните и се реализира преход към Reload thunk.
reload thunk.
hinstance thunk
3. mov ax, xxx
За функциите от библиотечните модули на Windows
(DLL)
(USER, KERNEL, GDI, както и драйверите)
Тагове от реферата: winows, ствмост, win16, вwin16, упраение, Windows, паметта











