⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_changeable_partition.pas

📁 采用可变分区存储管理并且 采用首次适应算法实现存储器分配与回收
💻 PAS
字号:
{以下程序模拟存储器的可变分区管理,采用最先适应分配算法,空闲区用链表来表示,
请将程序填写完整.}
program changeable_partition(input,output);
 type
  link=^partition; {指向空闲区的指针}
  partition=record
              next:link; {指向链表中下一个空闲区的指针}
              s,l:integer {s:空闲区的始址,l:空闲区的长度}
             end;
 var
  length,address:integer;
  q,p,p1:link; {p:当前结点,p1:当前结点的前一个结点}
  found,action,continue:0..1;
  {found:申请时,表示是否找到所申请的分区,释放时,表示释放的分区在链表中
  应插入的位置是否找到}
begin
 new(p);
 p^.s:=0;
 p^.l:=100;
 p^.next:=nil;
 new(q);
 q^.next:=p;
 q^.s:=-1;
 q^.l:=0;
 continue:=1;
 while continue=1 do
 begin
  p1:=q;
  p:=q^.next;
  write('请输入管理行为(0:申请,1:释放):');
  readln(action);
  case action of
  0:
  writeln('程序省略');
  1:
  begin
   write('释放的分区地址为:');
   readln(address);
   write('释放的分区长度为:');
   readln(length);
   found:=0;
   while found=0 do
   begin
    if p=nil then
    begin
     found:=1;
     if p1^.s+p1^.l<>address then
     begin
      new(p);
      p^.next:=nil;
      p1^.next:=p;
      p^.s:=address;
      p^.l:=length;
     end
     else
     begin
      p1^.l:=p1^.l+length;
      address:=p1^.s;
      length:=p1^.l
     end
    end
    else if address<p^.s then
    {在链表中插入或合并释放的分区,要区分四种情况}
    {填写程序段}








































    else
    begin
     p1:=p;
     p:=p^.next
    end;
   end;
   writeln('经释放合并后分区地址为:',address,',长度为:',length);
  end;
  end;
  write('是否继续(0:结束,1:继续)?');
  readln(continue);
 end;
end.









































⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -