Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

III. Распределение виртуальной памяти

Читайте также:
  1. A) Постоянно находится в памяти.
  2. Double сохраняется в памяти 15-16 десятичных знаков.
  3. I) Биноминальное распределение
  4. III. Распределение часов курса по темам и видам
  5. III. Распределение часов курса по темам и видам работ
  6. IV. РАСПРЕДЕЛЕНИЕ ЧАСОВ ПО ТЕМАМ ДИСЦИПЛИНЫ
  7. LINUX|| Структура памяти процесса в ОС Linux.
  8. LINUX|| Управление памятью в ОС Linux. Карта памяти
  9. Remembrance Day -День памяти.

Каждый процесс имеет свое собственное виртуальное адресное пространство. ОС 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: %8X\n", 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 demonstration\n"); /* 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 %X\n", buffer2);

strcpy (buffer2, p); /* copy the string */

printf ("%s", buffer2); /* Didplay the string */

free (buffer2); /* Release location */

}

else

{

printf ("Allocation error\n");

exit (1);

}

}

 


Дата добавления: 2014-12-18; просмотров: 14 | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2020 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав