Update Exception To Debug Shared files, w/ G

This commit is contained in:
sBubshait
2024-11-30 03:00:17 +00:00
parent 0b08893aaf
commit dca773addc
2 changed files with 18 additions and 5 deletions

View File

@@ -176,24 +176,29 @@ try_fetch_page (void *upage, bool write)
/* Check if the page is in the supplemental page table. That is, it is a page
that is expected to be in memory. */
struct page_entry *page = page_get (upage);
printf ("Hiiii 1!\n");
if (page == NULL)
return false;
printf ("Hiiii 2!\n");
/* An attempt to write to a non-writeable should fail. */
if (write && !page->writable)
return false;
printf ("FUCK PINTOS!\n");
/* Load the page into memory based on the type of data it is expecting. */
bool success = false;
switch (page->type) {
case PAGE_EXECUTABLE:
success = page_load (page, page->writable);
success = page_load (page, write);
break;
default:
printf ("what the heck\n");
return false;
}
if (success && page->writable &&
if (success && write &&
!pagedir_is_writable(thread_current()->pagedir, upage))
pagedir_set_writable(thread_current()->pagedir, upage, true);

View File

@@ -1,5 +1,6 @@
#include "page.h"
#include <string.h>
#include <stdio.h>
#include "filesys/file.h"
#include "threads/malloc.h"
#include "threads/palloc.h"
@@ -76,20 +77,23 @@ page_get (void *upage)
bool
page_load (struct page_entry *page, bool writable)
{
printf ("WE IN PAGE LOAD NOW %p %d\n", page->file, page->offset);
/* If the page is read-only, we want to check if it is a shared page already
loaded into memory. If it is, we can just map the page to the frame. */
if (!page->writable)
if (!page->writable && !writable)
{
ASSERT (page->read_bytes == PGSIZE);
printf ("Hi 0! %d %d\n", page->offset, file_length (page->file));
struct shared_page_entry *shared_page =
shared_page_get (page->file, page->upage);
if (shared_page != NULL)
{
printf ("Hi 0.1!\n");
/* Map the page to the shared frame for this read-only portion. */
if (!install_page (page->upage, shared_page->frame, false))
return false;
printf ("Hi 0.2!\n");
return true;
}
}
@@ -104,9 +108,11 @@ page_load (struct page_entry *page, bool writable)
if (!install_page (page->upage, frame, page->writable))
{
frame_free (frame);
printf ("Hi 2!\n");
return false;
}
printf ("UR MAMA SO FAT");
/* Move the file pointer to the correct location in the file. Then, read the
data from the file into the frame. Checks that we were able to read the
expected number of bytes. */
@@ -114,6 +120,7 @@ page_load (struct page_entry *page, bool writable)
if (file_read (page->file, frame, page->read_bytes) != (int) page->read_bytes)
{
frame_free (frame);
printf ("Hi 3!\n");
return false;
}
@@ -126,6 +133,7 @@ page_load (struct page_entry *page, bool writable)
if (shared_page_insert (page->file, page->upage, frame) == NULL)
{
frame_free (frame);
printf ("Hi 4!\n");
return false;
}
}