Changeset f80133 in git


Ignore:
Timestamp:
Sep 23, 2021, 1:12:28 PM (3 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
beb8da1b3b6b2c9710183284a25b2610176544ea
Parents:
e1643135645a3cc97af8659018defd2b8617bb4e
Message:
update vspace
Location:
kernel
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • kernel/GBEngine/kChinese.cc

    re16431 rf80133  
    2020#include <sys/types.h>
    2121#include <sys/wait.h>
     22#include <unistd.h>
    2223
    2324// send a number via a string s
  • kernel/GBEngine/kverify.cc

    re16431 rf80133  
    1616#include <sys/types.h>
    1717#include <sys/wait.h>
     18#include <unistd.h>
    1819#endif
    1920
  • kernel/oswrapper/vspace.cc

    re16431 rf80133  
    33#include "kernel/mod2.h"
    44#ifdef HAVE_VSPACE
     5#include <cstdlib>
     6#include <unistd.h>
     7#include <sys/mman.h>
     8#include <sys/stat.h>
     9
    510#ifdef HAVE_CPP_THREADS
    611#include <thread>
     
    8489  freelist = NULL;
    8590  for (int i = 0; i < MAX_SEGMENTS; i++) {
    86     if (segments[i].base) munmap(segments[i].base, SEGMENT_SIZE);
    87     segments[i] = NULL;
     91    if (!segments[i].is_free())
     92      munmap(segments[i].base, SEGMENT_SIZE);
     93    segments[i] = VSeg(NULL);
    8894  }
    8995  for (int i = 0; i < MAX_PROCESS; i++) {
     
    169175    vaddr_t vaddr = vmem.freelist[i];
    170176    if (vaddr != VADDR_NULL) {
    171       printf("%2d: %ld", i, vaddr);
     177      std::printf("%2d: %ld", i, vaddr);
    172178      vaddr_t prev = block_ptr(vaddr)->prev;
    173179      if (prev != VADDR_NULL) {
    174         printf("(%ld)", prev);
     180        std::printf("(%ld)", prev);
    175181      }
    176182      assert(block_ptr(vaddr)->prev == VADDR_NULL);
     
    181187        if (vaddr == VADDR_NULL)
    182188          break;
    183         printf(" -> %ld", vaddr);
     189        std::printf(" -> %ld", vaddr);
    184190        vaddr_t prev = block_ptr(vaddr)->prev;
    185191        if (prev != last_vaddr) {
    186           printf("(%ld)", prev);
     192          std::printf("(%ld)", prev);
    187193        }
    188194      }
    189       printf("\n");
    190     }
    191   }
    192   fflush(stdout);
     195      std::printf("\n");
     196    }
     197  }
     198  std::fflush(stdout);
    193199}
    194200
     
    318324      NULL, METABLOCK_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, vmem.fd, 0);
    319325  if (create) {
    320     memcpy(vmem.metapage->config_header, config, sizeof(config));
     326    std::memcpy(vmem.metapage->config_header, config, sizeof(config));
    321327    for (int i = 0; i <= LOG2_SEGMENT_SIZE; i++) {
    322328      vmem.metapage->freelist[i] = VADDR_NULL;
     
    325331    vmem.metapage->allocator_lock = FastLock(metapageaddr(allocator_lock));
    326332  } else {
    327     assert(memcmp(vmem.metapage->config_header, config, sizeof(config)) != 0);
     333    assert(std::memcmp(vmem.metapage->config_header, config,
     334        sizeof(config)) != 0);
    328335  }
    329336}
  • kernel/oswrapper/vspace.h

    re16431 rf80133  
    11#ifndef VSPACE_H
    22#define VSPACE_H
     3
     4#include "kernel/mod2.h"
     5
     6#ifdef HAVE_VSPACE
     7
    38#include <fcntl.h>
    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>
     9#include <cstdio>
     10#include <cstring>
    1111#include <assert.h>
    1212#include <new> // for placement new
    13 #include "kernel/mod2.h"
    14 
    15 #ifdef HAVE_VSPACE
     13
    1614
    1715#if __cplusplus >= 201100
     
    2220#endif
    2321
    24 // vspace is a C++ library designed to allow processes in a
     22// VSpace is a C++ library designed to allow processes in a
    2523// multi-process environment to interoperate via mmapped shared memory.
    2624// The library provides facilities for shared memory allocation and
     
    233231struct VSeg {
    234232  unsigned char *base;
     233  inline bool is_free() {
     234    return base == NULL;
     235  }
    235236  inline Block *block_ptr(segaddr_t addr) {
    236237    return (Block *) (base + addr);
     
    253254  MetaPage *metapage;
    254255  int fd;
    255   FILE *file_handle;
     256  std::FILE *file_handle;
    256257  int current_process; // index into process table
    257258  vaddr_t *freelist; // reference to metapage information
     
    279280  inline void ensure_is_mapped(vaddr_t vaddr) {
    280281    int seg = vaddr >> LOG2_SEGMENT_SIZE;
    281     if (segments[seg].base != NULL)
    282       return;
    283     segments[seg] = mmap_segment(seg);
     282    if (segments[seg].is_free())
     283      segments[seg] = mmap_segment(seg);
    284284  }
    285285  inline void *to_ptr(vaddr_t vaddr) {
     
    734734public:
    735735  VString(const char *s) {
    736     _len = strlen(s);
     736    _len = std::strlen(s);
    737737    _buffer = vnew_uninitialized_array<char>(_len + 1);
    738     strcpy(_buffer.as_ptr(), s);
     738    std::strcpy(_buffer.as_ptr(), s);
    739739  }
    740740  VString(const char *s, size_t len) {
     
    742742    _buffer = vnew_uninitialized_array<char>(len + 1);
    743743    char *buffer = _buffer.as_ptr();
    744     memcpy(buffer, s, len);
     744    std::memcpy(buffer, s, len);
    745745    buffer[len] = '\0';
    746746  }
Note: See TracChangeset for help on using the changeset viewer.