当前位置:网站首页>Réponses aux devoirs du csapp 7 8 9
Réponses aux devoirs du csapp 7 8 9
2022-07-06 14:59:00 【Wuhu Han Jinlun】
Les réponses sont fournies à titre d'information seulement
7.12
L'idée de résoudre le problème est d'imiter le comportement du Linker:Utilisez l'enregistrement de repositionnement pour identifier l'emplacement et utilisez la figure7.9L'algorithme dans calcule l'adresse absolue du repositionnement,Ou simplement à partir du graphique7.10Extrait des instructions de repositionnement dans.Deux points méritent d'être notés:8D'accord.movlLa directive contient deux références à repositionner.No5Lignes et paragraphes8L'instruction pour la ligne contient une pairebuf[1]Références,La valeur initiale estOx4,L'adresse déplacée est calculée comme suit:ADDR(buf) +4.
- Le premier repositionnement estmov 0x0,%edx,Correspond à la figure7-10Dans15D'accord,Oui.swap.oLe décalage moyen est3-6Dans la position de0x0Réinitialiser l'adresse réelle au moment de l'exécution0x80483c8+3=0x80483cb,Sa valeur est0x804945c
- Le deuxième repositionnement estmov 0x4,%eax,Dans le graphique16D'accord,Oui.swap.oLe décalage moyen est8-bEn position0x4Repositionnement et adresse réelle au moment de l'exécution0x80483c8+8=0x80483d0,Sa valeur est0x8049458
- Troisième et quatrième repositionnements àmovl $0x4,0x0,Correspond à la figure7-10De18D'accord,Oui.swap.oLe décalage moyen est10-13De0x0Et offset est14-17De0x4Réinitialiser à l'exécution0x80483c8+10=0x80483d8Et0x80483c8+14=0x80483dc,Et vamovl $0x4,0x0Modifier comme suit:movl $0x8049458,0x8049548
- Le cinquième repositionnement est mov 0x0,%eax,Dans la figure7-10De23D'accord, Le décalage est 1f-22De0x0 Repositionnement à l'adresse 0x80483c8+1f=0x80483e7Valeur sur0x8049548
Les résultats sont présentés dans le tableau ci - dessous.:
| Fig.7-10Numéro de ligne dans | Adresse | Valeur |
|---|---|---|
| 15 | 0x80483cb | 0x004945c |
| 16 | 0x80483d0 | 0x0049458 |
| 18 | 0x80483d8 | 0x0049548 |
| 18 | 0x80483dc | 0x0049458 |
| 23 | 0x80483e7 | 0x0049548 |
7.13
A
In.text Décalage de la Section pour 12 Fonction appelée à , À la section offset est 19 Un transfert de valeur s'est produit à ,Et la valeur est0x0, Pour être repositionné .Unionc Le Code s'appelle ici p3() La valeur de retour de edxDans le registre,Et puis*xpAjouter, Et puis à l'offset 21 Fonction de génération de position pour p2()Appel de. Donc les décalages de noeuds pour les trois repositionnements sont respectivement 12,19,21, Pour la directive call 12<p1+0xa>、Directivesmov 0x0,%eaxEt les directivescall 21<p1+0x19>Effectuer un repositionnement. Ou directementobjdump Le démontage donne le même résultat .
Les résultats sont présentés dans le tableau ci - dessous.:
| Décalage de section | Type de repositionnement | Nom du symbole |
|---|---|---|
| 0x12 | R_386_PC32(Références relatives) | p3 |
| 0x19 | R_386_32(Références absolues) | xp |
| 0x21 | R_386_PC32(Références relatives) | p2 |
B
.data Modifié dans la section xpValeur de, Repositionnement à xAdresse.Alors... .data Le noeud n'est repositionné qu'une seule fois , Section offset to 0x4, Le type de repositionnement est la référence absolue de repositionnement , Le nom du symbole est xp.
| Décalage de section | Type de repositionnement | Nom du symbole |
|---|---|---|
| 0x4 | R_386_32(Références absolues) | xp |
8.23
Le processus parent reçoit et capture le premier signal , Pendant que le processeur traite encore le premier signal , Un second signal est ajouté à l'ensemble à traiter , Il n'est pas encore reçu s'il est bloqué par le gestionnaire , Quand le troisième signal arrive , Comme le type est le même que le deuxième signal, il est rejeté ,No4、5 Il en va de même pour les signaux . Quand le premier signal aura été traité , Le noyau a remarqué un autre signal en attente (Signal2) Force le processus parent à accepter , Puis exécutez le processus , Après le deuxième traitement , Il n'y a plus de signal à traiter ,C'est fini.. Donc seulement deux signaux seront reçus et traités ,counter Ça ne vaut que 2,Au lieu de5.
8.24
L'exigence du titre est d'écrire des segments de texte en lecture seule dans un sous - processus , Cela peut entraîner une erreur de segment , Donc la deuxième exigence est de sortir une erreur de segment . Pour déterminer la fin anormale, on peut utiliser WIFSIGNALEDPour juger,Si non0 Une terminaison anormale s'est produite ,Le Code modifié est le suivant::
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#define N 2
int main()
{
int status,i;
pid_t pid;
for(i = 0;i < N;i++)
if((pid = fork()) == 0)
{
int *pt = 0x0;
*pt = 15213;
exit(100+i);
}
while((pid = waitpid(-1,&status,0)) > 0)
{
if(WIFEXITED(status))
printf("child %d terminated normally with exit status = %d\n",pid,WEXITSTATUS(status));
else if(WIFSIGNALED(status))
{
fprintf(stderr,"child %d terminated by signal %d",pid,WTERMSIG(status));
psignal(WTERMSIG(status)," ");
}
else
printf("child %d terminated abnormally\n",pid);
}
if(errno != ECHILD)
printf("waitpid error\n");
exit(0);
}
Les résultats sont les suivants:

9.11
A. L'adresse virtuelle est0x027c,Convertir en binaire:00 0010 0111 1100
| 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
B .Selon9.6.4L'hypothèse de la section,VPOPour l'adresse0Bit to5Bits,Ce titre est111100,VPNPour6Bit to13Bits,Ce titre est00001001,C'est - à - dire:0x9,TLBI- Oui.6-7Bitwise0x1,TLBTPour8-13Bitwise0x2. Consultez le tableau pour les bits d'index 0x1、Tag bit is0x2,Raté.,MMU Besoin de PTERetirerPPN, Obtenir un PPNPour0x17, Il n'y a pas de page manquante .
Le tableau complet est :
| Paramètres | Valeur |
|---|---|
| VPN | 0x9 |
| TLBIndex | 0x1 |
| TLBMarquage | 0x2 |
| TLBHit?(- Oui./Non) | Non |
| Pages manquantes?(- Oui./Province) | Non |
| PPN | 0x17 |
C. Numéro de cadre de la page physique à obtenir 0x17( 01 0111 ) Avant d'être l'adresse physique réelle 6Bits, Le décalage est constant ,Toujours.VPO( 11 1100 ),Obtenir l'adresse physique finale: 0101 1111 1100
| 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 |
D. L'adresse physique 6-11Bitwise010111En tant queCT,Sa valeur est0x17,2-5Bitwise1111En tant queCISa valeur est0xf,0-1 Bits offset as Block COLa valeur est:0x0. Trouver un bit d'index dans le cache 0xfGroupe、Tag bit0x17Oui.、Offset as0x0Octets de, Comme le montre la table cache 0xf Aucun groupe pour 0x17 Lignes marquées , C'est pour ça que , Aucun octet retourné . Les résultats sont présentés dans le tableau ci - dessous.:
| Paramètres | Valeur |
|---|---|
| Byte offset | 0x0 |
| Index de cache | 0xf |
| Jetons de cache | 0x17 |
| Cache hit?(- Oui./Non) | Non |
| Octets de cache retournés | - |
9.12
A.L'adresse virtuelle est0x03a9,Son binaire est00 0011 1010 1001
| 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
B. Selon9.6.4L'hypothèse de la section,VPOPour l'adresse0Bit to5Bits,Ce titre est101001,VPNPour6Bit to13Bits,Ce titre est0000 1110,C'est - à - dire:0xe,TLBI- Oui.6-7Bitwise0x2,TLBTPour8-13Bitwise0x3. Consultez le tableau pour les bits d'index 0x2、Tag bit is0x3, Parce que les bits valides sont 0Raté.,MMU Besoin de PTERetirerPPN, Obtenir un PPNPour0x11, Il n'y a pas de page manquante .
Le tableau complet est :
| Paramètres | Valeur |
|---|---|
| VPN | 0xe |
| TLBIndex | 0x2 |
| TLBMarquage | 0x3 |
| TLBHit?(- Oui./Non) | Non |
| Pages manquantes?(- Oui./Province) | Non |
| PPN | 0x11 |
C. Numéro de cadre de la page physique à obtenir 0x11( 01 0001) Avant d'être l'adresse physique réelle 6Bits, Le décalage est constant ,Toujours.VPO( 10 1001 ),Obtenir l'adresse physique finale: 0100 0110 1001
| 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 |
D: L'adresse physique 6-11Bitwise010001En tant queCT,Sa valeur est0x11,2-5Bitwise1010En tant queCISa valeur est0xa,0-1 Bits offset as Block COLa valeur est:0x1. Trouver un bit d'index dans le cache 0xaGroupe、Tag bit0x11Oui.、Offset as0x1Octets de, Comme le montre la table cache 0xa Aucun groupe pour 0x11 Lignes marquées , C'est pour ça que , Aucun octet retourné .
Formulaire complet :
| Paramètres | Valeur |
|---|---|
| Byte offset | 0x1 |
| Index de cache | 0xa |
| Jetons de cache | 0x11 |
| Cache hit?(- Oui./Non) | Non |
| Octets de cache retournés | - |
9.13
A.L'adresse virtuelle est0x0040,Son binaire est00 0000 0100 0000
| 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
B. Selon9.6.4L'hypothèse de la section,VPOPour l'adresse0Bit to5Bits,Ce titre est000000,,VPNPour6Bit to13Bits,Ce titre est0000 0001,C'est - à - dire:0x1,TLBI- Oui.6-7Bitwise0x1,TLBTPour8-13Bitwise0x0. QuandVPN=1Heure,Le BIT valide est0,PPNAucune. Donc il n'y a pas d'adresse physique . Il manque des pages .
| Paramètres | Valeur |
|---|---|
| VPN | 0x1 |
| TLBIndex | 0x1 |
| TLBMarquage | 0x0 |
| TLBHit?(- Oui./Non) | Non |
| Pages manquantes?(- Oui./Province) | - Oui. |
| PPN | 0x11 |
C.Pages manquantes
D.Pages manquantes
9.14
Les codes sont les suivants:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
int main(int argc, char const *argv[])
{
int fd;
if ((fd = open("hello.txt", O_RDWR)) == -1) {
perror("Failed to open hello.txt");
exit(EXIT_FAILURE);
}
struct stat stat_of_file;
if (fstat(fd, &stat_of_file) == -1) {
perror("Failed to get stat of hello.txt");
exit(EXIT_FAILURE);
}
char *p;
if ((p = mmap(NULL, stat_of_file.st_size, PROT_WRITE, MAP_SHARED, fd, 0)) == (void *)-1) {
perror("Failed to mmap");
exit(EXIT_FAILURE);
}
p[0] = 'J';
munmap(p, stat_of_file.st_size);
close(fd);
return 0;
}
Résultats des opérations:
边栏推荐
- If the position is absolute, touchablehighlight cannot be clicked - touchablehighlight not clickable if position absolute
- Keil5 MDK's formatting code tool and adding shortcuts
- 《统计学》第八版贾俊平第一章课后习题及答案总结
- Numpy快速上手指南
- JDBC 的四种连接方式 直接上代码
- Matplotlib绘图快速入门
- Function: find 1-1/2+1/3-1/4+1/5-1/6+1/7-... +1/n
- How does SQLite count the data that meets another condition under the data that has been classified once
- “人生若只如初见”——RISC-V
- STC-B学习板蜂鸣器播放音乐
猜你喜欢

Statistics 8th Edition Jia Junping Chapter 4 Summary and after class exercise answers

线程的实现方式总结

基于485总线的评分系统双机实验报告

Database monitoring SQL execution

Statistics, 8th Edition, Jia Junping, Chapter VIII, summary of knowledge points of hypothesis test and answers to exercises after class
![[HCIA continuous update] advanced features of routing](/img/05/a9ed32ec8c19b236355d48f7c2ad80.jpg)
[HCIA continuous update] advanced features of routing

STC-B学习板蜂鸣器播放音乐2.0

Interview Essentials: what is the mysterious framework asking?

1. Payment system

5 minutes to master machine learning iris logical regression classification
随机推荐
数字电路基础(三)编码器和译码器
CSAPP家庭作业答案7 8 9章
Statistics 8th Edition Jia Junping Chapter 7 Summary of knowledge points and answers to exercises after class
Matplotlib绘图快速入门
Keil5 MDK's formatting code tool and adding shortcuts
. Net6: develop modern 3D industrial software based on WPF (2)
Express
王爽汇编语言详细学习笔记二:寄存器
王爽汇编语言学习详细笔记一:基础知识
Pointer -- eliminate all numbers in the string
浙大版《C语言程序设计实验与习题指导(第3版)》题目集
Statistics 8th Edition Jia Junping Chapter 5 probability and probability distribution
Wang Shuang's detailed notes on assembly language learning I: basic knowledge
"If life is just like the first sight" -- risc-v
Pointers: maximum, minimum, and average
浙大版《C语言程序设计实验与习题指导(第3版)》题目集
Don't you even look at such a detailed and comprehensive written software test question?
What level do 18K test engineers want? Take a look at the interview experience of a 26 year old test engineer
How to learn automated testing in 2022? This article tells you
ES全文索引