当前位置:文档之家› 操作系统内存可变分区管理实验报告

操作系统内存可变分区管理实验报告


{
/* ఘ‫٭‬2 */
(bp-1)->m_size += bp->m_size;
while (bp->m_size)
{
bp++;
(bp-1)->m_addr = bp->m_addr;
(bp-1)->m_size = bp->m_size;
}
}
}
else
{
if (a+size == bp->m_addr && bp->m_size)
printf("य़ੜ:%4d ࣈ࣎:%p\n",coremap[i].m_size, coremap[i].m_addr); #ifdef AUTO
fprintf(output,"य़ੜ:%4d ࣈ࣎:%p\n",coremap[i].m_size, coremap[i].m_addr); #endif
if (bp>coremap && (bp-1)->m_addr+(bp-1)->m_size == a)
{
/* ఘ‫٭‬1,2 */
loopBp = bp-1;
loopBp->m_addr = (bp-1)->m_addr;
(bp-1)->m_size += size;
/* ఘ‫٭‬1 */
if (a+size == bp->m_addr)
coremap[i].m_addr = NULL; coremap[i].m_size = 0; } }
/* ᬌ‫ڊ‬ᤒጱٖ਻ */ void printcoremap(FILE *output) {
/* Function body: ಑‫ܦ‬coremapᤒӾ‫ݱ‬ᶱጱm_size޾m_addr */ int i; for (i = 0; i<N; ++i) {
register char *a; register struct map *bp;
for (bp = loopBp; bp->m_size; bp++) {
if(bp->m_size >= size) {
a = bp->m_addr; bp->m_addr += size; if((bp->m_size -= size) == 0)
‫ݢ‬զಋٚಧᬌ‫ڊ‬ᕮຎ‫ݸݸ‬ٚᬌ‫෈ک‬կӾ҅ਫḵಸ‫ޞ‬ጱ෈ਁٖ਻ኧᛔ૩ഩൎ҅ ᚆग़ᚆ੝̶ */
#include <stdio.h> #include <stdlib.h>
#define AUTO
//ᛔۖ݇හᬌ‫ف‬໒ୗ
//#define MANUAL
//ಋۖ݇හᬌ‫ف‬ཛྷୗ
#define N 5
#define INPUT_FILE_PATH "/Users/LXC/Desktop/InPutFile.txt" //෈կᬌ‫ف‬᪠ஆ
#define OUTPUT_FILE_PATH "/Users/LXC/Desktop/OutPutFile.txt"
/* ᤒጱਧԎ */
struct map
{
unsigned m_size;
஗ሾḒེᭇଫဩҁ൉ṛӞྍ҂ addr = (char *)lmalloc(unsigned size) ޾ lfree(unsigned size,char * addr)
ཛྷ೙UNIX‫ਂٖ܄ړݒݢ‬ᓕቘ҅ਫሿ੒ᧆٖਂ‫܄‬ጱ‫ړ‬ᯈ޾᯽නᓕቘ̶
2̵ᓒဩ௏మ޾༷ᥝ
ҁ1҂᭗ᬦහᕟᓕቘٖਂӾᑮᳳ‫܄‬ጱ᩸তࣈ࣎޾ᳩଶ҅ইຎ‫ړ‬ᯈጱᳩଶᒵԭ຤ᑮᳳ‫܄‬ጱ ᳩଶᮎԍᧆᑮᳳ‫܄‬੪ଫᧆ՗හᕟӾ‫ڢ‬ᴻ҅ᓕቘᑮᳳ‫܄‬ጱහᕟ‫ز‬ᔰӞེஃ‫ڹ‬ᑏۖ҅ইຎ ᯽නጱᑮᳵ޾຤ᑮᳳ‫܄‬ፘᮝ੪ᬰᤈ‫ݳ‬ଚ̶஗ሾḒེᭇଫᓒဩጱ໐ஞ௏మԅ‫ݱ‬ӻᑮᳳ‫܄‬ ጱ‫ړ‬ᯈ᷇ሲፘ‫҅ݶ‬ಅզ౯ֵአӞӻᶉா೰ᰒ‫ݒ‬ᰁֵٌ೰‫ݻ‬හᕟӾᤩ‫ړ‬ᯈጱ‫ݸ‬ᶎጱᮎࣘ ᑮᳳ‫̶܄‬ ҁ2҂‫ڠ‬ୌԧӞӻአԭᬌ‫݇ف‬හጱ෈կ,ᧆ෈կӾӞᤈ੪ฎӞԀਠෆጱ޸ե޾޸եಅᵱ ᥝጱහഝ҅ྲইғIᧆᤈ݇හጱᒫӞӻ݇හԅಗᤈጱ඙֢҅ᒫԫӻ݇හԅय़ੜ҅ᒫ ӣӻ݇හԅٖਂࣈ̶࣎ྯེ஗ሾ᮷՗ᧆ෈կӾ‫ڊݐ‬Ӟᤈፗ‫෈ک‬կٖጱහഝ‫ق‬᮱᧛‫ݐ‬ਠ ླ̶ ҁ3҂‫ڠ‬ୌԧӷӻਡਧԎAUTO޾MANUAL҅‫ݢ‬զࣁಋۖᬌ‫݇ف‬හ޾෈կಢ॒ቘᬌ‫݇ف‬ හԏᳵᅎၚ‫ڔ‬ഘ̶
case 'p': printcoremap(); break;
case 'q': exit(0); break;
default: break;
} } while ((command=='m'||command=='f'||command=='p'||command=='q')||printf("޸ եᬌ‫ف‬Კ᧏Ѻ᧗᯿ෛᬌ‫\ف‬n")); #endif
/* ᤒጱਧԎ */ struct map {
unsigned m_size; char *m_addr; }; struct map coremap[N];
//෈կᬌ‫ڊ‬᪠ஆ
static struct map *loopBp = coremap೰‫ݻ‬୮‫ڹ‬ᑮᳳ‫܄‬ጱӥӞᑮᳳ‫ྯֵ҅܄‬ӻᑮᳳ‫܄‬ጱ ᦢᳯ᷇ሲፘᒵ
4̵զӥԅᑕଧრᎱ
//
// main.c // MemoryManage // // Created by ຋‫מ‬౮ on 16/3/13. // Copyright © 2016ଙ ຋‫מ‬౮. All rights reserved. // /* ইӧտֵአ෈կᬌ‫ف‬/ᬌ‫҅ڊ‬ԞӧտֵአI/O᫨‫ݻ‬؉ᬌ‫޾ف‬ᬌ‫ڊ‬ᕮຎ෈կ҅
{
/* ఘ‫٭‬3 */
bp->m_addr -= size;
bp->m_size += size;
loopBp = bp;
loopBp->m_addr = bp->m_a) {
loopBp = bp; loopBp->m_addr = a; do {
t = bp->m_addr; bp->m_addr = a; a = t; tt = bp->m_size; bp->m_size = size; bp++;
do {
bp++; (bp-1)->m_addr = bp->m_addr; } while((bp-1)->m_size = bp->m_size);
loopBp = bp; if((loopBp+1)->m_size != 0) {
++loopBp; } else {
loopBp = coremap; } return(a); } } return(0); }
3̵݇හ᧔ก
#define AUTO ᛔۖ݇හᬌ‫ف‬໒ୗ
//#define MANUAL #define N 5
//ಋۖ݇හᬌ‫ف‬ཛྷୗ //ᑮᳳ‫܄‬ᳩଶ
#define INPUT_FILE_PATH "/Users/LXC/Desktop/InPutFile.txt" //෈կᬌ‫ف‬᪠ஆ
#define OUTPUT_FILE_PATH "/Users/LXC/Desktop/OutPutFile.txt"
printf("ᭌೠ޸ե:%c\n",command); fprintf(output, "ᭌೠ޸ե:%c\n",command); switch (command) {
case 'm': printf("ᬌ‫ړف‬ᯈٖਂጱय़ੜ:%d\n",size);
fprintf(output, "ᬌ‫ړف‬ᯈٖਂጱय़ੜ:%d\n",size); lmalloc(size); break; case 'f': printf("ᬌ‫ف‬᯽නٖਂጱय़ੜ:%d\n",size); fprintf(output, "ᬌ‫ړف‬ᯈٖਂጱय़ੜ:%d\n",size); printf("ᬌ‫ف‬᯽නٖਂጱࣈ࣎:%d\n",addr); fprintf(output, "ᬌ‫ف‬᯽නٖਂጱࣈ࣎:%d\n",addr); lfree(size, memory+addr); break; case 'p': printcoremap(output); break; case 'q': fclose(input); fclose(output); exit(0); break; default: break; } } while (fscanf(input, "%c,%d,%d\n",&command, &size, &addr)!=EOF); #endif }
1̵᷌ፓ
ᖫٟӞӻCᑕଧ҅አchar *malloc(unsigned size)‫ڍ‬හ‫ݻ‬ᔮᕹኩ᧗Ӟེٖਂᑮᳵҁই size=1000҅‫֖ܔ‬ԅਁᜓ҂҅አḒེᭇଫဩ
addr = (char *)fmalloc(unsigned size) ޾ ffree(unsigned size,char * addr)ҁच๜ᥝ࿢҂౲
case 'f': printf("ᬌ‫ف‬᯽නٖਂጱࣈ࣎:"); scanf("%d",&addr); while ((c=getchar())!='\n'&&c!=EOF ); printf("ᬌ‫ف‬᯽නٖਂጱय़ੜ:"); scanf("%d",&size); while ((c=getchar())!='\n'&&c!=EOF ); lfree(size, memory+addr); break;
相关主题