ZHAWNotes/Notes/Semester 4/BSY - Betriebssysteme/Week 7/MEM_students_code/MEM_lab.c

181 lines
4.5 KiB
C

/* ------------------------------------------------------------
____ ________
/ _/__ / __/ __/
_/ // _ \/ _/_\ \
/___/_//_/___/___/
Institute of Embedded Systems
Zurich University of Applied Sciences
8401 Winterthur, Switzerland
Project: BSY Labs
File: $RCSfile$
Purpose: example answer for the BSY lab MEM
Remarks: main routine
Author: donn
Date: K20 2021
Version: 0.9 FS21
$Id$
------------------------------------------------------------ */
#define _GNU_SOURCE
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
#include <pthread.h>
#include <unistd.h>
#include <sched.h>
#include <errno.h>
#include <sys/sysinfo.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/mman.h>
#define PAGE_SIZE 4096
// image library stuff
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"
#include "sobel_rgb2g.h"
extern int errno;
//***************************************************************************
// Function: main(), parameter: none
//***************************************************************************
int main(void) {
int result;
int pageSize;
char bufferLength = 3;
char *buffer;
unsigned char bufferState[bufferLength];
int section = 1;
(void) printf( "Hello MEM Lab\n" );
// ---------- section
(void) printf( "------------ Part %i: Simple program check memory of process\n", section++ );
// ToDO 1: insert function to get and printout the process pid. then put program in an endless loop
(void) printf( "----- the PID of this process is %i\n", getpid() );
(void) printf( "\nPress enter to continue\n" );
(void) getchar();
// ---------- section
(void) printf( "------------ Part %i: whats the page size\n", section++ );
// ToDo 2: insert function to get and read the page size
pageSize = getpagesize();
(void) printf( "----- the current page size is %d\n", pageSize);
(void) printf( "Press return to continue\n" );
(void) getchar();
// ---------- section
(void) printf( "------------ Part %i: generate some memory area\n", section++ );
// ToDo 3: insert code to reserve memory
(void) malloc(3 * PAGE_SIZE);
(void) printf( "\nPress return to continue\n" );
(void) getchar();
// ---------- section
(void) printf( "------------ Part %i: Are these pages in memory?\n", section++ );
// ToDO 4: reserve memory with aligned_alloc this is necessary for the mincore function to function properly
buffer = aligned_alloc(PAGE_SIZE, bufferLength * PAGE_SIZE);
void inMemory()
{
(void) mincore(buffer, bufferLength * PAGE_SIZE, bufferState);
if (bufferState[0] & 1)
{
(void) printf("In Memory\n");
}
else
{
(void) printf("Not in Memory\n");
}
}
inMemory();
(void) printf( "Press return to continue\n" );
(void) getchar();
// ToDo 5: write something into the reserved buffer
(void) sprintf(buffer, "Hello World! It's %s beautiful day!", "1");
(void) printf("Now in memory?\n");
inMemory();
(void) printf( "Press return to continue\n" );
(void) getchar();
// ---------- section
(void) printf( "------------ Part %i: Lets limit the available memory\n", section++ );
// prepare variables and load a large file
int width=0, height=0, bpp=0;
uint8_t *rgb_image = stbi_load("Hopper.png", &width, &height, &bpp, 3);
// in case of issues
if (rgb_image == NULL) {
perror("File read failed\n");
exit(EXIT_FAILURE);
}
// reserve memory for the greyscale image
// the rgb png comes in 8-bit format
uint8_t *gry_image = malloc ( width * height * sizeof(uint8_t) );
// lets exercise
rgb2grayscale ( width, height, rgb_image, gry_image );
(void) printf( "Check the number of page faults\n" );
(void) printf( "Press return to continue\n" );
(void) getchar();
(void) printf( "Carry out the instructions in the lab guide to limit the available memory and repeat \n" );
(void) printf( "Bye MEM Lab\n" );
exit( 0 );
}
//***************************************************************************