Трябва да осигуря региони на памет за нишки и да приложа основни концепции за управление на паметта. Идеята е да създадете Thread Local Storage и да управлявате със запис, четене, клониране и изтриване. Проблемът е, че когато се опитам да премахна защитата с mprotect на страницата, която е свързана с нишка в TLS, това ми изпраща грешка. Това е моята структура:
Разпределението за всяка страница
int cnt;
for (cnt = 0; cnt < page_num; cnt++) {
struct page *p;
p = (struct page *) calloc(1, sizeof(struct page));
int *map = mmap(0, page_size, 0, MAP_ANON | MAP_PRIVATE, 0, 0);
if (map == MAP_FAILED) {
perror("Error mmapping the file");
exit(EXIT_FAILURE);
}
p->address = (unsigned int)map;
Картографира се от mmap, но когато се опитам да защитя страницата с този код (или да премахна защитата, имам същата грешка и е при първия опит)
for(int i = 0; i < currentTLS->page_num; i++){
tls_unprotect(currentTLS->pages[i]);
}
И методът tls_unprotect:
void tls_protect(struct page *p){
if (mprotect((void *) p->address,PAGESIZE, PROT_READ | PROT_WRITE)) {
fprintf(stderr, "tls_unprotect: could not unprotect page\n");
exit(errno);
}
}
Методът на защита е същият.
Кодът за грешка е 12.
Оценявам всякакъв вид помощ. Благодаря.