File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -132,6 +132,7 @@ UPROGS=\
132132 $U/_grind\
133133 $U/_wc\
134134 $U/_zombie\
135+ $U/_mfree\
135136
136137fs.img : mkfs/mkfs README $(UPROGS )
137138 mkfs/mkfs fs.img README $(UPROGS )
Original file line number Diff line number Diff line change @@ -80,3 +80,20 @@ kalloc(void)
8080 memset ((char * )r , 5 , PGSIZE ); // fill with junk
8181 return (void * )r ;
8282}
83+
84+ uint64
85+ sys_mfree (void )
86+ {
87+ int free = 0 ;
88+ struct run * r ;
89+
90+ // Iterate through the freelist and count free pages.
91+ acquire (& kmem .lock );
92+ for (r = kmem .freelist ; r != 0 ; r = r -> next ) {
93+ free ++ ;
94+ }
95+ release (& kmem .lock );
96+
97+ // Return the number of bytes of all free pages.
98+ return free * PGSIZE ;
99+ }
Original file line number Diff line number Diff line change @@ -104,6 +104,7 @@ extern uint64 sys_unlink(void);
104104extern uint64 sys_wait (void );
105105extern uint64 sys_write (void );
106106extern uint64 sys_uptime (void );
107+ extern uint64 sys_mfree (void );
107108
108109static uint64 (* syscalls [])(void ) = {
109110[SYS_fork ] sys_fork ,
@@ -127,6 +128,7 @@ static uint64 (*syscalls[])(void) = {
127128[SYS_link ] sys_link ,
128129[SYS_mkdir ] sys_mkdir ,
129130[SYS_close ] sys_close ,
131+ [SYS_mfree ] sys_mfree ,
130132};
131133
132134void
Original file line number Diff line number Diff line change 2020#define SYS_link 19
2121#define SYS_mkdir 20
2222#define SYS_close 21
23+ #define SYS_mfree 22
Original file line number Diff line number Diff line change 1+ #include "kernel/types.h"
2+ #include "kernel/stat.h"
3+ #include "user/user.h"
4+
5+ int
6+ main (int argc , char * argv [])
7+ {
8+ printf ("%d\n" , mfree ());
9+
10+ exit (0 );
11+ }
Original file line number Diff line number Diff line change @@ -23,6 +23,7 @@ int getpid(void);
2323char * sbrk (int );
2424int sleep (int );
2525int uptime (void );
26+ int mfree (void );
2627
2728// ulib.c
2829int stat (const char * , struct stat * );
Original file line number Diff line number Diff line change @@ -36,3 +36,4 @@ sub entry {
3636entry(" sbrk" );
3737entry(" sleep" );
3838entry(" uptime" );
39+ entry(" mfree" );
You can’t perform that action at this time.
0 commit comments