bigsys-gnu / mvcc-os

KhronOS, a scalable operating systems based on sv6 (MIT) with MV-RLU (multi-version concurrency control mechanism)
Other
1 stars 0 forks source link

Critical limitation of malloc (umalloc.c) #15

Closed MadPlayer closed 3 years ago

MadPlayer commented 3 years ago
#include "user.h"

int
main(int argc, char *argv[])
{
  void *test;
  int i;

  for (i = 0; i < 4001; ++i)
    {
      if (!(test = malloc(i)))
        {
          printf(1, "%p\n", test);
          free(test);
        }
      printf(1, "%d byte is maximum.\n", i);
    }

  exit();
}

rlu user level test program의 문제점 중 하나를 찾았습니다. 위의 코드를 user level program으로 작성하여 실행시키면 1096 에서 오류가 납니다. (1096 bytes)

bigsys-gnu commented 3 years ago

오류 메시지는 뭐라고 나와요? gdb를 사용할 수 있죠 해당 bug 발생에서?

MadPlayer commented 3 years ago

오류 메시지는 뭐라고 나와요? gdb를 사용할 수 있죠 해당 bug 발생에서?

일단 gdb를 사용할 수는 있습니다. 오류 메시지는 여기에 올리도록 하겠습니다. 당장은 umalloc으로 동적으로 할당할 수 있는 공간이 매우 제한적인 것으로 보여서 올린 것입니다.

MadPlayer commented 3 years ago

1075 byte is maximum. 1076 byte is maximum. 1077 byte is maximum. 1078 byte is maximum. 1079 byte is maximum. 1080 byte is maximum. 1081 byte is maximum. 1082 byte is maximum. 1083 byte is maximum. 1084 byte is maximum. 1085 byte is maximum. 1086 byte is maximum. 1087 byte is maximum. 1088 byte is maximum. 1089 byte is maximum. 1090 byte is maximum. 1091 byte is maximum. 1092 byte is maximum. 1093 byte is maximum. 1094 byte is maximum. 1095 byte is maximum. 1096 byte is maximum. 0 pid 4 malloc: trap 14 err 5 on cpu 1 eip 0xd6 addr 0xfffffffc--kill proc $ killed

MadPlayer commented 3 years ago
QEMUOPTS := -hdb fs.img xv6.img -smp $(CPUS) -m 2G

위의 옵션으로 메모리를 2Gb 까지 증가 후 실행하였습니다. allocated: 492000 allocated: 493000 allocated: 494000 allocated: 495000 allocated: 496000 allocated: 497000 allocated: 498000 allocated: 499000 allocated: 500000 allocated: 501000 allocated: 502000 allocated: 503000 allocated: 504000 allocated: 505000 allocated: 506000 allocated: 507000 allocated: 508000 allocated: 509000 allocated: 510000 allocated: 511000 allocated: 512000 allocated: 513000 allocated: 514000 allocated: 515000 allocated: 516000 allocated: 517000 allocated: 518000 allocated: 519000 allocated: 520000 allocated: 521000 allocated: 522000 allocated: 523000 allocated: 524000 allocated: 525000 allocated: 526000 allocated: 527000 dynamic memory run out!!!

동적 메모리와는 무관하게 한계가 있어보입니다. 위의 dynamic memory run out!!!은 제가 임의로 sbrk syscall에 추가한 것입니다.