Реферат Курсовая Конспект
III. Распределение виртуальной памяти - Лабораторная Работа, раздел Компьютеры, Процессы в ОС Linux (II) Каждый Процесс Имеет Свое Собственное Виртуальное Адресное Пространство. Ос L...
|
Каждый процесс имеет свое собственное виртуальное адресное пространство. ОС Linux хранит адреса виртуальной памяти каждого процесса. Эти адреса доступны процессу и могут быть получены из глобальных переменных exent, edata, end (рис. 2).
Задание 6.
6.1. Используя начальную версию программы procmemory.c , зарисуйте в отчете распределение памяти процесса, как это сделано на рис. 2. Покажите на рисунке расположение и адреса main, showit, cptr, buffer1, i и память, выделенную в куче для buffer2.
6.2. Вставьте в программу системный вызов fork после оператора int i=0. Что будет напечатано? Убедитесь, что данные (например, i) в обоих процессах имеют одинаковые виртуальные адреса.
/* procmemory.c */
/* Program to display address information about the process */
/* Adapted from Gray, J.S., Interprocess Communication in UNIX: The Nooks & Crannies, Prentice-Hall, 1997, program 1.4 */
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
/* Below is a macro definition */
#define SHW_ADR(ID,I) (printf("ID %s t is at virt.address: %8Xn", ID,&I))
extern int etext, edata, end; /* Global variables for process memory */
char *cptr = "This message is output by showit()n"; /* Static */
char buffer1[25];
int showit (); /* Function prototype */
main ()
{
int i = 0; /* Automatic variable */
/* Printing addressing information */
printf ("nAddress etext: %8X n", &etext);
printf ("Address edata: %8X n", &edata);
printf ("Address end : %8X n", &end);
SHW_ADR ("main", main);
SHW_ADR ("showit", showit);
SHW_ADR ("cptr", cptr);
SHW_ADR ("buffer1", buffer1);
SHW_ADR ("i", i);
strcpy (buffer1, "A demonstrationn"); /* Library function */
write (1, buffer1, strlen(buffer1) + 1); /* System call */
showit(cptr);
} /* end of main function */
/* A function follows */
int showit (p)
char * p;
{
char *buffer2;
SHW_ADR("buffer2", buffer2);
if ((buffer2 = (char *)malloc ((unsigned) (strlen(p) + 1))) != NULL)
{
printf("Alocated memory at %Xn", buffer2);
strcpy (buffer2, p); /* copy the string */
printf ("%s", buffer2); /* Didplay the string */
free (buffer2); /* Release location */
}
else
{
printf ("Allocation errorn");
exit (1);
}
}
– Конец работы –
Эта тема принадлежит разделу:
На сайте allrefs.net читайте: "Лабораторная работа по курсу "Операционные системы""
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: III. Распределение виртуальной памяти
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов