- Timestamp:
- Sep 29, 2021, 3:17:38 PM (3 years ago)
- Branches:
- (u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
- Children:
- 4bd78f5e4c58b72e2ec9c8c2cc6ae6bb69b2a9c6
- Parents:
- 5d7d03a80f539e219c587a909c4ffb0edfe71bf0
- Location:
- kernel
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/GBEngine/kChinese.cc
r5d7d03 r6fbe8c 20 20 #include <sys/types.h> 21 21 #include <sys/wait.h> 22 #include <unistd.h>23 22 24 23 // send a number via a string s -
kernel/GBEngine/kverify.cc
r5d7d03 r6fbe8c 16 16 #include <sys/types.h> 17 17 #include <sys/wait.h> 18 #include <unistd.h>19 18 #endif 20 19 -
kernel/oswrapper/vspace.cc
r5d7d03 r6fbe8c 3 3 #include "kernel/mod2.h" 4 4 #ifdef HAVE_VSPACE 5 #include <cstdlib>6 #include <unistd.h>7 #include <sys/mman.h>8 #include <sys/stat.h>9 10 5 #ifdef HAVE_CPP_THREADS 11 6 #include <thread> … … 89 84 freelist = NULL; 90 85 for (int i = 0; i < MAX_SEGMENTS; i++) { 91 if (!segments[i].is_free()) 92 munmap(segments[i].base, SEGMENT_SIZE); 93 segments[i] = VSeg(NULL); 86 if (segments[i].base) munmap(segments[i].base, SEGMENT_SIZE); 87 segments[i] = NULL; 94 88 } 95 89 for (int i = 0; i < MAX_PROCESS; i++) { … … 175 169 vaddr_t vaddr = vmem.freelist[i]; 176 170 if (vaddr != VADDR_NULL) { 177 std::printf("%2d: %ld", i, vaddr);171 printf("%2d: %ld", i, vaddr); 178 172 vaddr_t prev = block_ptr(vaddr)->prev; 179 173 if (prev != VADDR_NULL) { 180 std::printf("(%ld)", prev);174 printf("(%ld)", prev); 181 175 } 182 176 assert(block_ptr(vaddr)->prev == VADDR_NULL); … … 187 181 if (vaddr == VADDR_NULL) 188 182 break; 189 std::printf(" -> %ld", vaddr);183 printf(" -> %ld", vaddr); 190 184 vaddr_t prev = block_ptr(vaddr)->prev; 191 185 if (prev != last_vaddr) { 192 std::printf("(%ld)", prev);186 printf("(%ld)", prev); 193 187 } 194 188 } 195 std::printf("\n");196 } 197 } 198 std::fflush(stdout);189 printf("\n"); 190 } 191 } 192 fflush(stdout); 199 193 } 200 194 … … 324 318 NULL, METABLOCK_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, vmem.fd, 0); 325 319 if (create) { 326 std::memcpy(vmem.metapage->config_header, config, sizeof(config));320 memcpy(vmem.metapage->config_header, config, sizeof(config)); 327 321 for (int i = 0; i <= LOG2_SEGMENT_SIZE; i++) { 328 322 vmem.metapage->freelist[i] = VADDR_NULL; … … 331 325 vmem.metapage->allocator_lock = FastLock(metapageaddr(allocator_lock)); 332 326 } else { 333 assert(std::memcmp(vmem.metapage->config_header, config, 334 sizeof(config)) != 0); 327 assert(memcmp(vmem.metapage->config_header, config, sizeof(config)) != 0); 335 328 } 336 329 } -
kernel/oswrapper/vspace.h
r5d7d03 r6fbe8c 1 1 #ifndef VSPACE_H 2 2 #define VSPACE_H 3 4 #include "kernel/mod2.h"5 6 #ifdef HAVE_VSPACE7 8 3 #include <fcntl.h> 9 #include <cstdio> 10 #include <cstring> 4 #include <stddef.h> 5 #include <stdio.h> 6 #include <stdlib.h> 7 #include <string.h> 8 #include <sys/mman.h> 9 #include <sys/stat.h> 10 #include <unistd.h> 11 11 #include <assert.h> 12 12 #include <new> // for placement new 13 13 #include "kernel/mod2.h" 14 15 #ifdef HAVE_VSPACE 14 16 15 17 #if __cplusplus >= 201100 … … 20 22 #endif 21 23 22 // VSpace is a C++ library designed to allow processes in a24 // vspace is a C++ library designed to allow processes in a 23 25 // multi-process environment to interoperate via mmapped shared memory. 24 26 // The library provides facilities for shared memory allocation and … … 231 233 struct VSeg { 232 234 unsigned char *base; 233 inline bool is_free() {234 return base == NULL;235 }236 235 inline Block *block_ptr(segaddr_t addr) { 237 236 return (Block *) (base + addr); … … 254 253 MetaPage *metapage; 255 254 int fd; 256 std::FILE *file_handle;255 FILE *file_handle; 257 256 int current_process; // index into process table 258 257 vaddr_t *freelist; // reference to metapage information … … 280 279 inline void ensure_is_mapped(vaddr_t vaddr) { 281 280 int seg = vaddr >> LOG2_SEGMENT_SIZE; 282 if (segments[seg].is_free()) 283 segments[seg] = mmap_segment(seg); 281 if (segments[seg].base != NULL) 282 return; 283 segments[seg] = mmap_segment(seg); 284 284 } 285 285 inline void *to_ptr(vaddr_t vaddr) { … … 734 734 public: 735 735 VString(const char *s) { 736 _len = st d::strlen(s);736 _len = strlen(s); 737 737 _buffer = vnew_uninitialized_array<char>(_len + 1); 738 st d::strcpy(_buffer.as_ptr(), s);738 strcpy(_buffer.as_ptr(), s); 739 739 } 740 740 VString(const char *s, size_t len) { … … 742 742 _buffer = vnew_uninitialized_array<char>(len + 1); 743 743 char *buffer = _buffer.as_ptr(); 744 std::memcpy(buffer, s, len);744 memcpy(buffer, s, len); 745 745 buffer[len] = '\0'; 746 746 }
Note: See TracChangeset
for help on using the changeset viewer.