当前位置:
文档之家› 操作系统内存可变分区管理实验报告
操作系统内存可变分区管理实验报告
{
/* ఘ٭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_sizem_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҂ڠୌԧӷӻਡਧԎAUTOMANUAL҅ݢզࣁಋۖᬌ݇فහկಢ॒ቘᬌ݇ف හԏᳵᅎၚڔഘ̶
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;