Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Extended High-Level C-Compatible Memory Model 
with Limited Low-Level Pointer Cast Support for 
Jessie Intermediate Langua...
Моделирование памяти 
int *a, *b, d[4]; 
char c[4]; 
int n, m; 
……… 
a = malloc (sizeof (int) * 4); 
b = a; 
b[n] = 1; 
d[...
Низкоуровневая модель 
int *a, *b, d[4]; 
char c[4]; 
int n, m; 
……… 
a = malloc (sizeof (int) * 4); 
b = a; 
b[n] = 1; 
d...
Низкоуровневая модель 
int *a, *b, d[4]; 
char c[4]; 
int n, m; 
……… 
a = malloc (sizeof (int) * 4); 
b = a; 
b[n] = 1; 
d...
Низкоуровневая модель с регионами 
a, b 
d 
c 
a b 
a b 
a b 
a b 
a, b 
a b
Низкоуровневая модель с регионами 
int *a, *b, d[4]; 
char c[4]; 
int n, m; 
……… 
a = malloc (sizeof (int) * 4); 
b = a; 
...
Низкоуровневая модель с регионами 
f(int *a, int *d, 
char *c) 
{ 
int *b; 
int n, m; 
……… 
b = a; 
b[n] = 1; 
d[m] = 2; 
...
Высокоуровневая модель с регионами 
f(int *a, int *d, 
char *c) 
{ 
int *b; 
int n, m; 
……… 
b = a; 
b[n] = 1; 
d[m] = 2; ...
Высокоуровневая модель с регионами 
f(int *a, int *d, 
char *c) 
{ 
int *b; 
int n, m; 
……… 
b = a; 
b[n] = 1; 
d[m] = 2; ...
Высокоуровневая модель с регионами 
f(int *a, int *d, 
char *c) 
{ 
int *b; 
int n, m; 
……… 
b = a; 
b[n] = 1; 
d[m] = 2; ...
Поддержка структур 
struct derived { 
size_t size; 
char data[8]; 
}; 
struct derived *d; 
struct derived *pd = &d; 
……… 
...
Поддержка префиксного кастирования 
struct base 
size_t size; 
}; 
struct derived { 
struct base base; 
char data[8]; 
}; ...
Поддержка префиксного кастирования
Поддержка переинтерпретации 
void set_w16(void *p, unsigned short v) 
{ 
unsigned char *ptr = (unsigned char *) p; 
ptr[0]...
Поддержка переинтерпретации
Поддержка переинтерпретации 
p (unisnged char *) p 
p 
uint16 
? 
p (unisnged char *) p 
p 
uint16 
(unsigned char *) p 
u...
p 
Поддержка переинтерпретации 
p 
uint16 
(unisnged char *) p 
(unsigned char *) 
(char *) … 
(...*) (p + n) 
uint8 
(cha...
Проблема когерентности обновлений 
unsigned short p = 5; 
unsigned short *q = &p; 
*((char *) p) = 6; 
if (*q == 5) { 
//....
Проблема когерентности обновлений 
unsigned short p = 5; 
unsigned short *q = &p; 
*((char *) p) = 6; 
if (*q == 5) { 
//....
Проблема когерентности обновлений 
unsigned short p = 5; 
unsigned short *q = &p; 
//@ jessie pragma p :> char *; 
*((char...
Решение проблемы когерентности 
Jessie 
поддерживает проверку условий 
корректности защиты памяти!
Решение проблемы когерентности 
unsigned short p = 5; 
unsigned short *q = &p; 
*((char *) p) = 6; 
//@ jessie pragma ((ch...
Поддержка переинтерпретации
Поддержка переинтерпретации
Направления дальнейшей работы 
➔ unsigned char p[5]; 
unsigned short *q = (unsigned short *) &p; 
5 не кратно sizeof (unsi...
Upcoming SlideShare
Loading in …5
×

Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer Cast Support for Jessie Intermediate Language

2,302 views

Published on

Mikhail Mandrykin and Alexey Khoroshilov, ИСП РАН, Moscow

Published in: Science
  • Be the first to comment

  • Be the first to like this

Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer Cast Support for Jessie Intermediate Language

  1. 1. Extended High-Level C-Compatible Memory Model with Limited Low-Level Pointer Cast Support for Jessie Intermediate Language Расширенная высокоуровневая C-совместимая модель памяти для промежуточного языка Jessie с частичной поддержкой низкоуровневого приведения типа указателей Алексей Хорошилов Михаил Мандрыкин Институт системного программирования РАН
  2. 2. Моделирование памяти int *a, *b, d[4]; char c[4]; int n, m; ……… a = malloc (sizeof (int) * 4); b = a; b[n] = 1; d[m] = 2; c[1] = 'a';
  3. 3. Низкоуровневая модель int *a, *b, d[4]; char c[4]; int n, m; ……… a = malloc (sizeof (int) * 4); b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; константы a0, b0, d0 константа c0 константы n0 и m0 ……… b1=a0 / M1=M0[b1 +32 n ← 08] / M2=M1[b1 +32 n +32 132 ← 08] / M3=M2[b1 +32 n+32 232 ← 08] / M4=M3[b1 +32 n+32 332← 18] / M5=M4[d0 +32 m ←08] / M6=M5[d0 +32 m +32 132←08] / M7=M6[d0 +32 m+32 232←08] / M8=M7[d0 +32 m+32 332←28] / M9=M8[c0 +32 132←978]
  4. 4. Низкоуровневая модель int *a, *b, d[4]; char c[4]; int n, m; ……… a = malloc (sizeof (int) * 4); b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; (a0 ≤ d0− 16 / a0 ≥ d0+ 16) / (a0 ≤ c0− 16 / a0 ≥ c0+ 4) / (d0 ≤ c0− 16 / d0 ≥ c0+ 4) ……… b1=a0 / M1=M0[b1 +32 n ← 08] / M2=M1[b1 +32 n +32 132 ← 08] / M3=M2[b1 +32 n+32 232 ← 08] / M4=M3[b1 +32 n+32 332← 18] / M5=M4[d0 +32 m ←08] / M6=M5[d0 +32 m +32 132←08] / M7=M6[d0 +32 m+32 232←08] / M8=M7[d0 +32 m+32 332←28] / M9=M8[c0 +32 132←978]
  5. 5. Низкоуровневая модель с регионами a, b d c a b a b a b a b a, b a b
  6. 6. Низкоуровневая модель с регионами int *a, *b, d[4]; char c[4]; int n, m; ……… a = malloc (sizeof (int) * 4); b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; ……… b1=a0 / Ma0, 1 =Ma0, 0[b1 +32 n ← 08] / Ma0, 2 =Ma0, 1[b1 +32 n +32 132 ← 08] / Ma0, 3 =Ma0, 2[b1 +32 n+32 232 ← 08] / Ma0, 4 =Ma0, 3[b1 +32 n+32 332 ← 18] / Md0, 1 =Md0, 0[d0 +32 m ← 08] / Md0, 2 =Md0, 1[d0 +32 m +32 132 ← 08] / Md0, 3 =Md0, 2[d0 +32 m+32 232 ← 08] / Md0, 4 =Md0, 3[d0 +32 m+32 332 ← 28] / Mac0, 1 =Mc0, 0[c0 +32 132 ← 978] a, b d c
  7. 7. Низкоуровневая модель с регионами f(int *a, int *d, char *c) { int *b; int n, m; ……… b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; } (a0 ≤ d0− 16 / a0 ≥ d0+ 16) / (a0 ≤ c0− 16 / a0 ≥ c0+ 4) / (d0 ≤ c0− 16 / d0 ≥ c0+ 4) ……… b1=a0 / Ma0, 1 =Ma0, 0[b1 +32 n ← 08] / Ma0, 2 =Ma0, 1[b1 +32 n +32 132 ← 08] / Ma0, 3 =Ma0, 2[b1 +32 n+32 232 ← 08] / Ma0, 4 =Ma0, 3[b1 +32 n+32 332 ← 18] / Md0, 1 =Md0, 0[d0 +32 m ← 08] / Md0, 2 =Md0, 1[d0 +32 m +32 132 ← 08] / Md0, 3 =Md0, 2[d0 +32 m+32 232 ← 08] / Md0, 4 =Md0, 3[d0 +32 m+32 332 ← 28] / Mac0, 1 =Mc0, 0[c0 +32 132 ← 978] предусловие a, b d c
  8. 8. Высокоуровневая модель с регионами f(int *a, int *d, char *c) { int *b; int n, m; ……… b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; } (a0 ≤ d0− 16 / a0 ≥ d0+ 16) ……… b1=a0 / Mint a0, 1=Mint a0, 0[b1 +32 n ← 08] / Mint a0, 2=Mint a0, 1[b1 +32 n +32 132 ← 08] / Mint a0, 3=Mint a0, 2[b1 +32 n+32 232 ← 08] / Mint a0, 4=Mint a0, 3[b1 +32 n+32 332 ← 18] / Mint d0, 1=Mint d0, 0[d0 +32 m ← 08] / Mint d0, 2=Mint d0, 1[d0 +32 m +32 132 ← 08] / Mint d0, 3=Mint d0, 2[d0 +32 m+32 232 ← 08] / Mint d0, 4=Mint d0, 3[d0 +32 m+32 332 ← 28] / Mint c0, 1=Mchar c0, 0[c0 +32 132 ← 978] предусловие a, b 32-бит. d 32-бит. с 8-бит.
  9. 9. Высокоуровневая модель с регионами f(int *a, int *d, char *c) { int *b; int n, m; ……… b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; } (a0 ≤ d0− 4 / a0 ≥ d0+ 4) ……… b1=a0 / Mint a0, 0=Mint a0, 0[b1 +32 n ← 132] / Mint d0, 0=Mint d0, 0[d0 +32 m ← 232] / Mint c0, 0=Mchar c0, 0[c0 +32 132 ← 978] предусловие a, b 32-бит. d 32-бит. с 8-бит.
  10. 10. Высокоуровневая модель с регионами f(int *a, int *d, char *c) { int *b; int n, m; ……… b = a; b[n] = 1; d[m] = 2; c[1] = 'a'; } (a0 ≤ d0− 4 / a0 ≥ d0+ 4) ……… b1=a0 / Mint a0, 1=Mint a0, 0[b1 + n ← 1] / Mint d0, 1=Mint d0, 0[d0 + m ← 2] / Mint c0, 1=Mchar c0, 0[c0 + 1 ← 97] предусловие a, b int32 d int32 с int8
  11. 11. Поддержка структур struct derived { size_t size; char data[8]; }; struct derived *d; struct derived *pd = &d; ……… pd->data[1] = 0; pd->size = 2; &d, pd drived.data ……… pd1=d0 / Mint8 int8* &d, pd derived.size uint32 d0.data, pd→data int8 d0.data, 1=Mint8 d0.data, 0[Mint8* (d0, derived.data), 0[pd0] +1 ← 0] / Muint32 (d0, derived.size), 1[pd0]=Muint32 (d0, derived.size), 0[pd0 ← 2]
  12. 12. Поддержка префиксного кастирования struct base size_t size; }; struct derived { struct base base; char data[8]; }; struct derived *d; struct derived *pd = &d; &d, pd drived.data int8* ((struct base *) pd)->size = 2; Muint32 &d, pd base.size uint32 d0.data, pd→data int8 (d0, base.size), 1[pd0]=Muint32 (d0, base.size), 0[pd0 ← 2]
  13. 13. Поддержка префиксного кастирования
  14. 14. Поддержка переинтерпретации void set_w16(void *p, unsigned short v) { unsigned char *ptr = (unsigned char *) p; ptr[0] = v & 0xff; ptr[1] = (v >> 8) & 0xff; } p (unisnged char *) p p uint16 ?
  15. 15. Поддержка переинтерпретации
  16. 16. Поддержка переинтерпретации p (unisnged char *) p p uint16 ? p (unisnged char *) p p uint16 (unsigned char *) p uint8 (char *) p ? (char *) p (char *) p int8
  17. 17. p Поддержка переинтерпретации p uint16 (unisnged char *) p (unsigned char *) (char *) … (...*) (p + n) uint8 (char *) p (char *) … (... *) (p – n) int8
  18. 18. Проблема когерентности обновлений unsigned short p = 5; unsigned short *q = &p; *((char *) p) = 6; if (*q == 5) { //...
  19. 19. Проблема когерентности обновлений unsigned short p = 5; unsigned short *q = &p; *((char *) p) = 6; if (*q == 5) { //... здесь нужна синхронизация памятей регионов p и (char *) p и здесь тоже!
  20. 20. Проблема когерентности обновлений unsigned short p = 5; unsigned short *q = &p; //@ jessie pragma p :> char *; *((char *) p) = 6; //@ jessie pragma ((char * )p) :> unsigned short *; if (*q == 5) { //...
  21. 21. Решение проблемы когерентности Jessie поддерживает проверку условий корректности защиты памяти!
  22. 22. Решение проблемы когерентности unsigned short p = 5; unsigned short *q = &p; *((char *) p) = 6; //@ jessie pragma ((char * )p) :> unsigned short *; if (q == 5) { //... не валидно!
  23. 23. Поддержка переинтерпретации
  24. 24. Поддержка переинтерпретации
  25. 25. Направления дальнейшей работы ➔ unsigned char p[5]; unsigned short *q = (unsigned short *) &p; 5 не кратно sizeof (unsigned short) – в статье предложено дальнейшее расширение языка Jessie; ➔ cтруктуры с несколькими полями, в том числе с выравниванием; ➔ применение к коду модулей ядра Linux

×