Для студентов МГУ им. Ломоносова по предмету Верификация программ на моделяхАрхив практикиАрхив практики 2019-09-19СтудИзба

Лабораторная работа: Архив практики

Описание

Описание файла отсутствует

Характеристики лабораторной работы

Учебное заведение
Семестр
Просмотров
56
Скачиваний
1
Размер
641,7 Kb

Список файлов

solution

Число потенциальных состояний для функции f

Переменных: 5 (a,b,h,x,y)

Операторов: 12

Потенциальных состояний - 12 * 2 ^(32 * 5) = 12 * 2^160

Число достижимых состояний для функции f

x принимает 3 значения (#, 5, 8)

y принимает 2 значения (#, 2)

Данный кусок кода не достижим, т.к. y = 2, а в условии y > 5

{

x = 2;

}

Итого: 11 * 3 * 2 * 2^96

(f_x == # || f_x == 5 || f_x == 8) && (f_y == # || f_y == 2) && (c_f != 9) && (c_f < 11)

Число потенциальных состояний для функции g

Переменных: 5(a,b,h,x,y)

Операторов: 18

Потенциальных состояний - 18 * 2^160

Число достижимых состояний для функции g

x принимает 3 значения (#, 10, 4)

y принимает 3 значения (#, 7, 6)

Данный кусок не достижим, т.к. x = 10, а в условии x < 0

{

if (y > 10)

{

if (h > 5)

{

x = 6;

h = 3;

}

x = 7;

}

}

Данный кусок не достижим, т.к. x = 10, а в условии x > 10

{

x = 2;

}

Итого: 12 * 3 * 3 * 2^96

(g_x == # || g_x == 10 || g_x == 4) && (g_y == # || g_y == 7 || g_y == 6) && (c_g < 4 || (c_g > 9 && c_g != 14 && c_g < 17))

Для всей программы.

В функциях f и g по 4 переменных и переменная h глобальная

Потенциальных: 12 * 18 * 2^(32*(4+4+1)) = 150 * 2^288

Достижимых: 11 * 3 * 2 * 12 * 3 * 3 * 2^(2*5) = 7128 * 2^160

task

int h;

void f (int a, int b)

{

0:int x, y;

1:x = 5;

2:y = 2;

3:h = 6;

4:h = y;

5:h = y - b;

6:if (h > b - x)

{

7:if (h > y - b)

{

8:if (y > 5)

{

9:x = 2;

}

else

{

10:x = 8;

}

}

}

11:}

void g (int a, int b)

{

0:int x, y;

1:x = 10;

2:y = 7;

3:h = 4;

4:if (x < 0)

{

5:if (y > 10)

{

6:if (h > 5)

{

7:x = 6;

8:h = 3;

}

9:x = 7;

}

}

10:y = 6;

11:while (x > 5)

{

12:if (h > 0) break;

13:if (x > 10)

{

14:x = 2;

}

15:h = 4;

16:x = 4;

}

17:}

log

(Spin Version 6.0.1 -- 16 December 2010)

Full statespace search for:

never claim - (none specified)

assertion violations+

cycle checks - (disabled by -DSAFETY)

invalid end states+

State-vector 68 byte, depth reached 25, errors: 0

149 states, stored

101 states, matched

0 matches within stack

250 transitions (= stored+matched)

1 atomic steps

hash conflicts: 0 (resolved)

stackframes: 3/0

stats: fa 0, fh 0, zh 0, zn 0 - check 0 holds 0

stack stats: puts 0, probes 0, zaps 0

4.577memory usage (Mbyte)

unreached in proctype F

427_KovalenkoAI_2.pml:17, state 9, "x = 2"

(1 of 20 states)

unreached in proctype G

427_KovalenkoAI_2.pml:39, state 7, "x = 6"

427_KovalenkoAI_2.pml:40, state 8, "h = 3"

427_KovalenkoAI_2.pml:38, state 10, "((h>5))"

427_KovalenkoAI_2.pml:38, state 10, "else"

427_KovalenkoAI_2.pml:43, state 12, "x = 7"

427_KovalenkoAI_2.pml:58, state 27, "x = 2"

(5 of 38 states)

unreached in init

(0 of 4 states)

pan: elapsed time 0 seconds

lts_m12

Распознанный текст из изображения:

оа б

х=га

ОДЗХ,ОДО.О

1.0. †,5. 9,9

-10 -С

у=г

2,0 б 5 2 Я 1.1«Ь5. †.10.9 о.г..о,ыгод

17=6

17=4

х=ы

3,0.6.«.г.о.

г 1.9, .г 10 9

г.г.-..-.яДО. О.З 4.6. ДОЗ

' «х«01

17=6

1г=у

х=га

3 — 2

3,1.6.5.2.10.9

г.г. Дьгдад 1З 4д.одод 0,9.4.9..10.7

4.о,ггьгзх

'(х 'ОЗ вЂ” с

1г=т-Ь

1г=у

1=6

з=г

-«а

гзд,5581ОУ 0.10.4.9,,10,6

«.О.о,з.гзхо

З.г.б.«.2.10,7

г.з,с.«.гда.

4 1 2 \ ДДО о

1«.*Ь-х ~=10

1г=у-Ь 1г=у 17=4 7=6

18.=03 =г

с=б — 5 х:5

О.о.огьг.*.= бд.о..-.гдо.= 4.г.г.с.гдад зззгьгдод з.зоь-.г.год

гызз.гдо. 1.20 4,«з.га.б 0.11.4.ОЫ.10.6

СЬ.у-оз -га 1«..Ь-х 1г=у-Ь «=4 7=1' 1г=у ' «х«07

' «х«07 «=б =б =2 х..« — 5

1г.о

ы,о,о 5.2. ы 6.2,0.«.гдо. с.г,а..-„гдод 4.ЗЗ,с.гза. 4.3.2.5,2.10. зызгьгдод

г 10 4 с г 10 б 1.11.4.5..10.6

3,9.6.5,2„10.7

0.16.4.9, .10,6

т с

— 1О

Ь=у

«=У.Ь 1«=У.Ь '(х'«03

ь: а — с

«Х'«03 7=\'

1г=у

с=б

10.1.0.5.2,10.:

5« з,оз гдо;

3,10.6.5.2.10.6

2.11.4.«.2.10.6

О.г.о « г,год

4 оз.с,гдод

4 о.г.с,гдод

3.10,4.5.2,10.6

1,16.4 с Ы10 б

1«=у х.

'охгоз г=У-Ь 1г=у-Ь вЂ

«хЬ х

«Ь«У-Ьг 7=4

17'О =2

х.'5 7=6

ы.г.огьгдод

6.3.4.«.2.10. «ыз -,гдо 7

б.з.о.с.гдоз 5.9.0 5.2 год 4.10.4.5.2.10.6

3.11.4.5.2.10.6

3.11.6.5.2.10.6

2.16.4.«.2.10.6

4 10 2 с 2 10 б

1«- 0 87=6

17. у-Ь '(хто) 17- Ь-х — б

1г=у-Ь ттх. 5

1г=у 1«: 0

'87«.-у-о) 'тх: 07 7:Ь-х — б г=у-Ь

х 5

5 го 5

4.11.4.5 Д.10.6 4.11.2.5,2,10,6

6.9.0.5.2.10,7 с за а 5 гзо6

3.16.6.5 Д.10.6

3.16.4.5.2.10.6

Ох*'03 О«: у-ьг — б 01-

ь:-о

1г=т

г — -Ь Ь=з-о Ьг 0

«.11.4.«,2.10.6

6.10.0.«.2.10.6

.11.0.5.2 10.6

4.16.4.5.2.10.6 4.16.2.5,2.10.6

10.9.0.5.2.10.

«,гдод

ыд.«.гдоз

6.10.4.5.2.10.6

17'.0

с=б '87«ху'-Щ

1г=у-Ь г=у-Ь

7. Ь-х

'77 -*О>

х 5

.10.4.5.2.10.6

6.11.4.5.2.10.6

5.16.4.«.2.10.6

10.10.0.«.2.10.6

6.11.0.5.2.10.6

с 12 0 5 2 10 б

«.16.0.«.2.10.6

оыз,«.гдод

0.7

1«: Ь-х тх. 107

17:.Ь-х

Мо.у-ю МЬ. >

9.10.4.«,2,10,6

„11.4.5.2,10,6 6.16.4.5.2,10.6

10.11.0.5,2.10,6

6,12,0.5 Д.10.6

..14.03 .г 10.6

,г.ыд

'Ох:оз

.16.4,5.2.10.6

5.15.4.«.2.10.6

9.11.4.«.2.10.6

10.12.0.«.2.10.6

10.4,8.2.10,6

х- х=В 17''0 '«3«*57

Пх- -Ь>

1О*Ь-х — 4

'(х. 10>

9 16.43.2.Ы.О

6.15.4.5.2.10.6

5.10.4.5.2.4.6

10.14,0.5.2,10,6

10.11,4.8.2.10.6

7:.у-Ь х=4 «.Ь-х 787 53

.15.4.5,2,10,6 6.10.4.5,2,4.6 5.16.4,5,2.4.6

17. 0

1 О, 1 6 .4 . 8 .2 . 1 0 .6

От'53 -4 «ху-ь 18'-сз ' ь-

9,15.4.« ДД0.6 7,10.4.5.2.4.6 ОД6.4.с.2,4.6

— 8 х=4 'Оу 5) '(хс 5) т-Ь

9.10.4.5.2.4.6

7.16.4.«.2.4.6

10.15.4.8.2.10.6

х=4 х=я '(х'5) 'буаз)

9,16.4.5.2,4.6

10,10.4.8.2.4.6

Ох'.53 — 8

10.16,4.8.2.4.6

.с.ЗЗ.«.г,гау

17 'Ь.х Фах 01

.3.4,5,2.10. 6.9.4.5.2.10. 5.10.4.5.2.10.6 10.3.0.5.2.10, Ос" 53 Ох* 03 17. 3'-ь — 6 18 1-

х=В '(х«0) 'ОУ« 5) с=б 7 т-Ь х. «17. Ь-х

тог х=8 « — б 'гу'.53 х с Ь.-у.-о Ь:-О

3=6 — я 037 53 ьхо 1«хт-Ь

7=4

10Д5.4,5.2,10.6

'Ох -Ьз 080103 6,14.0.«,2.10.6

б 16 0 с 2 10 б

х

10.16.0,5,2.10.6

state

Согласно верификатору, у модели - 149 достижимых состояний

В LTS для программы - 128 достижимых состояний

Запуск с параметрами -o1 -o2 -o3 -DNOREDUCE

Количество состояний отличается потому, что:

1. В верификаторе добавлен процесс init, который составляет 3 состояния (2 run и 1 -end-)

2. В верификаторе добавлены 26 состояний -end- (по одному на каждый оператор в функции f - 10 состояний, и в функции g - 16 состояний)

3. В верификаторе 8 операторов -end- совпадают с окончанием вычислений в LTS

149 - 3 - 26 + 8 = 128

log

0:proc - (:root:) creates proc 1 (model)

0:proc - (:root:) creates proc 2 (manager)

1:proc 1 (model) 427_KovalenkoAI_3.pml:22 (state 3)[goto B]

2:proc 1 (model) 427_KovalenkoAI_3.pml:22 (state 3)[(1)]

3:proc 0 (model) 427_KovalenkoAI_3.pml:22 (state 3)[goto B]

4:proc 0 (model) 427_KovalenkoAI_3.pml:22 (state 3)[goto B]

5:proc 1 (model) 427_KovalenkoAI_3.pml:27 (state 4)[.(goto)]

6:proc 1 (model) 427_KovalenkoAI_3.pml:12 (state 9)[flag[procNum] = 1]

7:proc 1 (model) 427_KovalenkoAI_3.pml:9 (state 6)[turn = (1-procNum)]

8:proc 1 (model) 427_KovalenkoAI_3.pml:10 (state 7)[(((flag[(1-procNum)]==0)||(turn==proc Num)))]

9:proc 0 (model) 427_KovalenkoAI_3.pml:22 (state 3)[(1)]

10:proc 0 (model) 427_KovalenkoAI_3.pml:27 (state 4)[.(goto)]

-------------

depth-limit (-u10 steps) reached

#processes: 3

flag[0] = 0

flag[1] = 1

turn = 0

mutex = 0

10:proc 2 (manager) 427_KovalenkoAI_3.pml:76 (state 8)

10:proc 1 (model) 427_KovalenkoAI_3.pml:11 (state 8)

10:proc 0 (model) 427_KovalenkoAI_3.pml:12 (state 9)

3 processes created

solution

Возможно не удалось распознать кодировку файла

task3

/*

* Function lpfc_bsg_ct_unsol_event at linux-2.6.38/drivers/scsi/lpfc/lpfc_bsg. c:759-994

* Allocation call kzalloc at 88

* Release call kfree at 139

* DEG: 21 LOC: 51

*/

lpfc_bsg_ct_unsol_event(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,

struct lpfc_iocbq *piocbq)

{

uint32_t evt_req_id = 0;

uint32_t cmd;

uint32_t len;

struct lpfc_dmabuf *dmabuf = NULL;

struct lpfc_bsg_event *evt;

struct event_data *evt_dat = NULL;

struct lpfc_iocbq *iocbq;

size_t offset = 0;

struct list_head head;

struct ulp_bde64 *bde;

dma_addr_t dma_addr;

int i;

struct lpfc_dmabuf *bdeBuf1 = piocbq->context2;

struct lpfc_dmabuf *bdeBuf2 = piocbq->context3;

struct lpfc_hbq_entry *hbqe;

struct lpfc_sli_ct_request *ct_req;

struct fc_bsg_job *job = NULL;

unsigned long flags;

int size = 0;

INIT_LIST_HEAD(&head);

list_add_tail(&head, &piocbq->list);

if (piocbq->iocb.ulpBdeCount == 0 ||

piocbq->iocb.un.cont64[0].tus.f.bdeSize == 0)

goto error_ct_unsol_exit;

if (phba->link_state == LPFC_HBA_ERROR ||

(!(phba->sli.sli_flag & LPFC_SLI_ACTIVE)))

goto error_ct_unsol_exit;

if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED)

dmabuf = bdeBuf1;

else {

dma_addr = getPaddr(piocbq->iocb.un.cont64[0].addrH igh,

piocbq->iocb.un.cont64[0].addrLow);

dmabuf = lpfc_sli_ringpostbuf_get(phba, pring, dma_addr);

}

if (dmabuf == NULL)

goto error_ct_unsol_exit;

ct_req = (struct lpfc_sli_ct_request *)dmabuf->virt;

evt_req_id = ct_req->FsType;

cmd = ct_req->CommandResponse.bits.CmdRsp;

len = ct_req->CommandResponse.bits.Size;

if (!(phba->sli3_options & LPFC_SLI3_HBQ_ENABLED))

lpfc_sli_ringpostbuf_put(phba, pring, dmabuf);

spin_lock_irqsave(&phba->ct_ev_lock, flags);

list_for_each_entry(evt, &phba->ct_ev_waiters, node) {

if (!(evt->type_mask & FC_REG_CT_EVENT) ||

evt->req_id != evt_req_id)

continue;

lpfc_bsg_event_ref(evt);

spin_unlock_irqrestore(&phba->ct_ev_lock , flags);

evt_dat = kzalloc(sizeof(*evt_dat), GFP_KERNEL);

if (evt_dat == NULL) {

spin_lock_irqsave(&phba->ct_ev_lock, flags);

lpfc_bsg_event_unref(evt);

lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC,

"2614 Memory allocation failed for "

"CT event\n");

break;

}

if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) {

/* take accumulated byte count from the last iocbq */

iocbq = list_entry(head.prev, typeof(*iocbq), list);

evt_dat->len = iocbq->iocb.unsli3.rcvsli3.acc_len;

} else {

list_for_each_entry(iocbq, &head, list) {

for (i = 0; i < iocbq->iocb.ulpBdeCount; i++)

evt_dat->len +=

iocbq->iocb.un.cont64[i].tus.f.bdeSize;

}

}

evt_dat->data = kzalloc(evt_dat->len, GFP_KERNEL);

if (evt_dat->data == NULL) {

lpfc_printf_log(phba, KERN_WARNING, LOG_LIBDFC,

"2615 Memory allocation failed for "

"CT event data, size %d\n",

evt_dat->len);

kfree(evt_dat);

spin_lock_irqsave(&phba->ct_ev_lock, flags);

lpfc_bsg_event_unref(evt);

spin_unlock_irqrestore(&phba->ct_ev_lock , flags);

goto error_ct_unsol_exit;

}

list_for_each_entry(iocbq, &head, list) {

size = 0;

if (phba->sli3_options & LPFC_SLI3_HBQ_ENABLED) {

bdeBuf1 = iocbq->context2;

bdeBuf2 = iocbq->context3;

}

for (i = 0; i < iocbq->iocb.ulpBdeCount; i++) {

if (phba->sli3_options &

LPFC_SLI3_HBQ_ENABLED) {

if (i == 0) {

hbqe = (struct lpfc_hbq_entry *)

&iocbq->iocb.un.ulpWord[0];

size = hbqe->bde.tus.f.bdeSize;

dmabuf = bdeBuf1;

} else if (i == 1) {

hbqe = (struct lpfc_hbq_entry *)

&iocbq->iocb.unsli3.

sli3Words[4];

size = hbqe->bde.tus.f.bdeSize;

dmabuf = bdeBuf2;

}

if ((offset + size) > evt_dat->len)

size = evt_dat->len - offset;

} else {

size = iocbq->iocb.un.cont64[i].

tus.f.bdeSize;

bde = &iocbq->iocb.un.cont64[i];

dma_addr = getPaddr(bde->addrHigh,

bde->addrLow);

dmabuf = lpfc_sli_ringpostbuf_get(phba,

pring, dma_addr);

}

if (!dmabuf) {

lpfc_printf_log(phba, KERN_ERR,

LOG_LIBDFC, "2616 No dmabuf "

"found for iocbq 0x%p\n",

iocbq);

kfree(evt_dat->data);

kfree(evt_dat);

spin_lock_irqsave(&phba->ct_ev_lock,

flags);

lpfc_bsg_event_unref(evt);

spin_unlock_irqrestore(

&phba->ct_ev_lock, flags);

goto error_ct_unsol_exit;

}

memcpy((char *)(evt_dat->data) + offset,

dmabuf->virt, size);

offset += size;

if (evt_req_id != SLI_CT_ELX_LOOPBACK &&

!(phba->sli3_options &

LPFC_SLI3_HBQ_ENABLED)) {

lpfc_sli_ringpostbuf_put(phba, pring,

dmabuf);

} else {

switch (cmd) {

case ELX_LOOPBACK_DATA:

diag_cmd_data_free(phba,

(struct lpfc_dmabufext *)

dmabuf);

break;

case ELX_LOOPBACK_XRI_SETUP:

if ((phba->sli_rev ==

LPFC_SLI_REV2) ||

(phba->sli3_options &

LPFC_SLI3_HBQ_ENABLED

)) {

lpfc_in_buf_free(phba,

dmabuf);

} else {

lpfc_post_buffer(phba,

pring,

1);

}

break;

default:

if (!(phba->sli3_options &

LPFC_SLI3_HBQ_ENABLED))

lpfc_post_buffer(phba,

pring,

1);

break;

}

}

}

}

spin_lock_irqsave(&phba->ct_ev_lock, flags);

if (phba->sli_rev == LPFC_SLI_REV4) {

evt_dat->immed_dat = phba->ctx_idx;

phba->ctx_idx = (phba->ctx_idx + 1) % 64;

/* Provide warning for over-run of the ct_ctx array */

if (phba->ct_ctx[evt_dat->immed_dat].flags &

UNSOL_VALID)

lpfc_printf_log(phba, KERN_WARNING, LOG_ELS,

"2717 CT context array entry "

"[%d] over-run: oxid:x%x, "

"sid:x%x\n", phba->ctx_idx,

phba->ct_ctx[

evt_dat->immed_dat].oxid,

phba->ct_ctx[

evt_dat->immed_dat].SID);

phba->ct_ctx[evt_dat->immed_dat].oxid =

piocbq->iocb.ulpContext;

phba->ct_ctx[evt_dat->immed_dat].SID =

piocbq->iocb.un.rcvels.remoteID;

phba->ct_ctx[evt_dat->immed_dat].flags = UNSOL_VALID;

} else

evt_dat->immed_dat = piocbq->iocb.ulpContext;

evt_dat->type = FC_REG_CT_EVENT;

list_add(&evt_dat->node, &evt->events_to_see);

if (evt_req_id == SLI_CT_ELX_LOOPBACK) {

wake_up_interruptible(&evt->wq);

lpfc_bsg_event_unref(evt);

break;

}

list_move(evt->events_to_see.prev, &evt->events_to_get);

lpfc_bsg_event_unref(evt);

job = evt->set_job;

evt->set_job = NULL;

if (job) {

job->reply->reply_payload_rcv_len = size;

/* make error code available to userspace */

job->reply->result = 0;

job->dd_data = NULL;

/* complete the job back to userspace */

spin_unlock_irqrestore(&phba->ct_ev_lock , flags);

job->job_done(job);

spin_lock_irqsave(&phba->ct_ev_lock, flags);

}

}

spin_unlock_irqrestore(&phba->ct_ev_lock , flags);

error_ct_unsol_exit:

if (!list_empty(&head))

list_del(&head);

if (evt_req_id == SLI_CT_ELX_LOOPBACK)

return 0;

return 1;

}

xspin

Распознанный текст из изображения:

га га гз гз гз гз за за згг згг ого ого гзз гзз гзз гзз гоз гоз гоо гоо

а>а

task47

Вариант 47

Задача 1 После наступления события 'процесс p находится на метке iter_begin' верно: никогда не выполняется 'процесс q находится на метке received'

#define P "p@iter_begin"

#define Q "q@received"

[](P -> []!Q)

Задача 2 Между событиями 'значение глобальной переменной state равно enter' и 'значение глобальной переменной state равно leave' верно: никогда не выполняется 'из канала d принимается сообщение ack'

#define A (state==enter)

#define B (state==leave)

#define C d?ack

[]((A & !B & <>B) -> (!C U B))

Задача 3 После наступления события 'процесс p находится на метке iter_begin' верно: сразу за событием 'процесс q находится на метке received' наступает событие 'процесс p находится на метке sent' (полученное свойство не обязательно может быть инвариантным к прореживанию)

#define P "p@iter_begin"

#define Q "q@received"

#define Z "p@sent"

[](P -> (Q -> XZ))

check1_counterexample

Starting :init: with pid 0

Starting :never: with pid 1

Never claim moves to line 106[(1)]

Starting model with pid 2

2:proc 0 (:init:) line 120 "D:/Study/ВПНМ/mc05/check1.pml" (state 1)[(run model())]

Starting manager with pid 3

3:proc 0 (:init:) line 120 "D:/Study/ВПНМ/mc05/check1.pml" (state 2)[(run manager())]

Never claim moves to line 104[((!((model._p==ALLC))&&(model._p==B) ))]

5:proc 1 (model) line 31 "D:/Study/ВПНМ/mc05/check1.pml" (state 1)[(1)]

Never claim moves to line 110[(!((model._p==ALLC)))]

7:proc 1 (model) line 14 "D:/Study/ВПНМ/mc05/check1.pml" (state 5)[flag[procNum] = 1]

9:proc 1 (model) line 15 "D:/Study/ВПНМ/mc05/check1.pml" (state 6)[turn = (1-procNum)]

11:proc 1 (model) line 15 "D:/Study/ВПНМ/mc05/check1.pml" (state 7)[(((flag[(1-procNum)]==0)||(turn==proc Num)))]

13:proc 1 (model) line 16 "D:/Study/ВПНМ/mc05/check1.pml" (state 8)[mutex = (mutex+1)]

15:proc 1 (model) line 22 "D:/Study/ВПНМ/mc05/check1.pml" (state 10)[mutex = (mutex-1)]

17:proc 1 (model) line 23 "D:/Study/ВПНМ/mc05/check1.pml" (state 11)[flag[procNum] = 0]

19:proc 1 (model) line 14 "D:/Study/ВПНМ/mc05/check1.pml" (state 14)[flag[procNum] = 1]

21:proc 1 (model) line 15 "D:/Study/ВПНМ/mc05/check1.pml" (state 15)[turn = (1-procNum)]

23:proc 1 (model) line 15 "D:/Study/ВПНМ/mc05/check1.pml" (state 16)[(((flag[(1-procNum)]==0)||(turn==pro cNum)))]

25:proc 1 (model) line 16 "D:/Study/ВПНМ/mc05/check1.pml" (state 17)[mutex = (mutex+1)]

27:proc 1 (model) line 22 "D:/Study/ВПНМ/mc05/check1.pml" (state 76)[mutex = (mutex-1)]

29:proc 1 (model) line 23 "D:/Study/ВПНМ/mc05/check1.pml" (state 77)[flag[procNum] = 0]

Never claim moves to line 111[((!((model._p==ALLC))&&(model._p==EN D)))]

31:proc 1 (model) line 81 "D:/Study/ВПНМ/mc05/check1.pml" (state 79)[(1)]

Never claim moves to line 114[(1)]

spin: trail ends after 33 steps

#processes: 3

flag[0] = 0

flag[1] = 0

turn = 0

mutex = 0

33:proc 2 (manager) line 87 "D:/Study/ВПНМ/mc05/check1.pml" (state 8)

33:proc 1 (model) line 30 "D:/Study/ВПНМ/mc05/check1.pml" (state 3)

33:proc 0 (:init:) line 121 "D:/Study/ВПНМ/mc05/check1.pml" (state 4) <valid end state>

33:proc - (:never:) line 115 "D:/Study/ВПНМ/mc05/check1.pml" (state 16) <valid end state>

3 processes created

check1_out

warning: for p.o. reduction to be valid the never claim must be stutter-invariant

(never claims generated from LTL formulae are stutter-invariant)

pan: claim violated! (at depth 32)

pan: wrote check1.pml.trail

(Spin Version 5.2.4 -- 2 December 2009)

Warning: Search not completed

+ Partial Order Reduction

Full statespace search for:

never claim +

assertion violations+ (if within scope of claim)

cycle checks - (disabled by -DSAFETY)

invalid end states- (disabled by never claim)

State-vector 36 byte, depth reached 32, errors: 1

18 states, stored

2 states, matched

20 transitions (= stored+matched)

1 atomic steps

hash conflicts: 0 (resolved)

2.501memory usage (Mbyte)

pan: elapsed time 0.003 seconds

Скопировано файлов: 1.

check2_counterexample

Starting :init: with pid 0

Starting :never: with pid 1

Never claim moves to line 109[(1)]

Starting model with pid 2

2:proc 0 (:init:) line 132 "D:/Study/ВПНМ/mc05/check2.pml" (state 1)[(run model())]

Starting manager with pid 3

3:proc 0 (:init:) line 132 "D:/Study/ВПНМ/mc05/check2.pml" (state 2)[(run manager())]

Never claim moves to line 107[((!((model._p==END))&&(model._p==B)) )]

5:proc 1 (model) line 32 "D:/Study/ВПНМ/mc05/check2.pml" (state 1)[(1)]

Never claim moves to line 113[(!((model._p==END)))]

7:proc 1 (model) line 15 "D:/Study/ВПНМ/mc05/check2.pml" (state 5)[flag[procNum] = 1]

Never claim moves to line 123[(!((model._p==END)))]

9:proc 1 (model) line 16 "D:/Study/ВПНМ/mc05/check2.pml" (state 6)[turn = (1-procNum)]

Never claim moves to line 113[(!((model._p==END)))]

11:proc 1 (model) line 16 "D:/Study/ВПНМ/mc05/check2.pml" (state 7)[(((flag[(1-procNum)]==0)||(turn==proc Num)))]

Never claim moves to line 123[(!((model._p==END)))]

13:proc 1 (model) line 17 "D:/Study/ВПНМ/mc05/check2.pml" (state 8)[mutex = (mutex+1)]

Never claim moves to line 113[(!((model._p==END)))]

15:proc 1 (model) line 23 "D:/Study/ВПНМ/mc05/check2.pml" (state 10)[mutex = (mutex-1)]

Never claim moves to line 123[(!((model._p==END)))]

17:proc 1 (model) line 24 "D:/Study/ВПНМ/mc05/check2.pml" (state 11)[flag[procNum] = 0]

Never claim moves to line 113[(!((model._p==END)))]

19:proc 1 (model) line 43 "D:/Study/ВПНМ/mc05/check2.pml" (state 13)[(1)]

Never claim moves to line 123[(!((model._p==END)))]

21:proc 1 (model) line 48 "D:/Study/ВПНМ/mc05/check2.pml" (state 22)[ch!alloc]

22:proc 2 (manager) line 92 "D:/Study/ВПНМ/mc05/check2.pml" (state 1)[ch?alloc]

Never claim moves to line 113[(!((model._p==END)))]

24:proc 2 (manager) line 94 "D:/Study/ВПНМ/mc05/check2.pml" (state 2)[ch!alloc_ok]

25:proc 1 (model) line 54 "D:/Study/ВПНМ/mc05/check2.pml" (state 33)[ch?alloc_ok]

Never claim moves to line 123[(!((model._p==END)))]

27:proc 1 (model) line 55 "D:/Study/ВПНМ/mc05/check2.pml" (state 34)[(1)]

Never claim moves to line 113[(!((model._p==END)))]

29:proc 1 (model) line 64 "D:/Study/ВПНМ/mc05/check2.pml" (state 48)[goto :b1]

Never claim moves to line 123[(!((model._p==END)))]

31:proc 1 (model) line 15 "D:/Study/ВПНМ/mc05/check2.pml" (state 52)[flag[procNum] = 1]

Never claim moves to line 113[(!((model._p==END)))]

33:proc 1 (model) line 16 "D:/Study/ВПНМ/mc05/check2.pml" (state 53)[turn = (1-procNum)]

Never claim moves to line 123[(!((model._p==END)))]

35:proc 1 (model) line 16 "D:/Study/ВПНМ/mc05/check2.pml" (state 54)[(((flag[(1-procNum)]==0)||(turn==pro cNum)))]

Never claim moves to line 113[(!((model._p==END)))]

37:proc 1 (model) line 17 "D:/Study/ВПНМ/mc05/check2.pml" (state 55)[mutex = (mutex+1)]

Never claim moves to line 123[(!((model._p==END)))]

39:proc 1 (model) line 71 "D:/Study/ВПНМ/mc05/check2.pml" (state 58)[(1)]

Never claim moves to line 113[(!((model._p==END)))]

41:proc 1 (model) line 77 "D:/Study/ВПНМ/mc05/check2.pml" (state 69)[(1)]

Never claim moves to line 123[(!((model._p==END)))]

43:proc 1 (model) line 23 "D:/Study/ВПНМ/mc05/check2.pml" (state 10)[mutex = (mutex-1)]

Never claim moves to line 113[(!((model._p==END)))]

45:proc 1 (model) line 24 "D:/Study/ВПНМ/mc05/check2.pml" (state 11)[flag[procNum] = 0]

Never claim moves to line 123[(!((model._p==END)))]

47:proc 1 (model) line 43 "D:/Study/ВПНМ/mc05/check2.pml" (state 13)[(1)]

Never claim moves to line 113[(!((model._p==END)))]

49:proc 1 (model) line 48 "D:/Study/ВПНМ/mc05/check2.pml" (state 22)[ch!alloc]

50:proc 2 (manager) line 92 "D:/Study/ВПНМ/mc05/check2.pml" (state 1)[ch?alloc]

Never claim moves to line 123[(!((model._p==END)))]

52:proc 2 (manager) line 94 "D:/Study/ВПНМ/mc05/check2.pml" (state 2)[ch!alloc_ok]

53:proc 1 (model) line 54 "D:/Study/ВПНМ/mc05/check2.pml" (state 33)[ch?alloc_ok]

Never claim moves to line 114[(((!((model._p==END))&&!((model._p== FFREE)))&&(model._p==ALLC_OK)))]

55:proc 1 (model) line 55 "D:/Study/ВПНМ/mc05/check2.pml" (state 34)[(1)]

Never claim moves to line 118[(!((model._p==FFREE)))]

57:proc 1 (model) line 64 "D:/Study/ВПНМ/mc05/check2.pml" (state 48)[goto :b1]

59:proc 1 (model) line 15 "D:/Study/ВПНМ/mc05/check2.pml" (state 52)[flag[procNum] = 1]

61:proc 1 (model) line 16 "D:/Study/ВПНМ/mc05/check2.pml" (state 53)[turn = (1-procNum)]

63:proc 1 (model) line 16 "D:/Study/ВПНМ/mc05/check2.pml" (state 54)[(((flag[(1-procNum)]==0)||(turn==pro cNum)))]

65:proc 1 (model) line 17 "D:/Study/ВПНМ/mc05/check2.pml" (state 55)[mutex = (mutex+1)]

67:proc 1 (model) line 70 "D:/Study/ВПНМ/mc05/check2.pml" (state 57)[goto :b0]

69:proc 1 (model) line 23 "D:/Study/ВПНМ/mc05/check2.pml" (state 76)[mutex = (mutex-1)]

71:proc 1 (model) line 24 "D:/Study/ВПНМ/mc05/check2.pml" (state 77)[flag[procNum] = 0]

Never claim moves to line 119[((!((model._p==FFREE))&&(model._p==E ND)))]

73:proc 1 (model) line 84 "D:/Study/ВПНМ/mc05/check2.pml" (state 79)[(1)]

Never claim moves to line 127[(1)]

spin: trail ends after 75 steps

#processes: 3

flag[0] = 0

flag[1] = 0

turn = 0

mutex = 0

75:proc 2 (manager) line 90 "D:/Study/ВПНМ/mc05/check2.pml" (state 8)

75:proc 1 (model) line 31 "D:/Study/ВПНМ/mc05/check2.pml" (state 3)

75:proc 0 (:init:) line 133 "D:/Study/ВПНМ/mc05/check2.pml" (state 4) <valid end state>

75:proc - (:never:) line 128 "D:/Study/ВПНМ/mc05/check2.pml" (state 28) <valid end state>

3 processes created

check2_out

warning: for p.o. reduction to be valid the never claim must be stutter-invariant

(never claims generated from LTL formulae are stutter-invariant)

pan: claim violated! (at depth 74)

pan: wrote check2.pml.trail

(Spin Version 5.2.4 -- 2 December 2009)

Warning: Search not completed

+ Partial Order Reduction

Full statespace search for:

never claim +

assertion violations+ (if within scope of claim)

cycle checks - (disabled by -DSAFETY)

invalid end states- (disabled by never claim)

State-vector 36 byte, depth reached 106, errors: 1

93 states, stored

10 states, matched

103 transitions (= stored+matched)

1 atomic steps

hash conflicts: 0 (resolved)

2.501memory usage (Mbyte)

pan: elapsed time 0.006 seconds

Скопировано файлов: 1.

check3_out

warning: for p.o. reduction to be valid the never claim must be stutter-invariant

(never claims generated from LTL formulae are stutter-invariant)

(Spin Version 5.2.4 -- 2 December 2009)

+ Partial Order Reduction

Full statespace search for:

never claim +

assertion violations+ (if within scope of claim)

cycle checks - (disabled by -DSAFETY)

invalid end states- (disabled by never claim)

State-vector 36 byte, depth reached 78, errors: 0

122 states, stored

21 states, matched

143 transitions (= stored+matched)

1 atomic steps

hash conflicts: 0 (resolved)

2.501memory usage (Mbyte)

unreached in proctype model

line 86, state 80, "-end-"

(1 of 81 states)

unreached in proctype manager

line 102, state 11, "-end-"

(1 of 11 states)

unreached in proctype :init:

(0 of 4 states)

pan: elapsed time 0.001 seconds

check4_out

warning: for p.o. reduction to be valid the never claim must be stutter-invariant

(never claims generated from LTL formulae are stutter-invariant)

(Spin Version 5.2.4 -- 2 December 2009)

+ Partial Order Reduction

Full statespace search for:

never claim +

assertion violations+ (if within scope of claim)

cycle checks - (disabled by -DSAFETY)

invalid end states- (disabled by never claim)

State-vector 44 byte, depth reached 1169, errors: 0

1784 states, stored

1840 states, matched

3624 transitions (= stored+matched)

2 atomic steps

hash conflicts: 1 (resolved)

2.501memory usage (Mbyte)

unreached in proctype model

line 83, state 81, "-end-"

(1 of 82 states)

unreached in proctype manager

line 99, state 11, "-end-"

(1 of 11 states)

unreached in proctype :init:

(0 of 5 states)

pan: elapsed time 0.005 seconds

check5_out

warning: for p.o. reduction to be valid the never claim must be stutter-invariant

(never claims generated from LTL formulae are stutter-invariant)

(Spin Version 5.2.4 -- 2 December 2009)

+ Partial Order Reduction

Full statespace search for:

never claim +

assertion violations+ (if within scope of claim)

cycle checks - (disabled by -DSAFETY)

invalid end states- (disabled by never claim)

State-vector 36 byte, depth reached 50, errors: 0

43 states, stored

8 states, matched

51 transitions (= stored+matched)

1 atomic steps

hash conflicts: 0 (resolved)

2.501memory usage (Mbyte)

unreached in proctype model

line 83, state 80, "-end-"

(1 of 81 states)

unreached in proctype manager

line 99, state 11, "-end-"

(1 of 11 states)

unreached in proctype :init:

(0 of 4 states)

pan: elapsed time 0 seconds

solutions

1.В ходе выполнения тела функции рано или поздно происходит попытка захвата ресурса при помощи указанного вызова *alloc*.

Модель модифицирована - запускается только один процесс, моделирующий функцию, на котором проверяется свойство.

#define start (model@B)

#define end (model@END)

#define allc (model@ALLC)

/* ![](start -> (!end U allc)) */

2.В ходе выполнения тела функции после успешного захвата ресурса рано или поздно ресурс освобождается при помощи вызова *free*

Модель модифицирована - запускается только один процесс, моделирующий функцию, на котором проверяется свойство.

#define start (model@B)

#define end (model@END)

#define allc_ok (model@ALLC_OK)

#define ffree (model@FFREE)

/* ![](start -> ((allc -> (!end U ffree)) U end)) */

3.На каждый вызов системной функции выделения и освобождения ресурса обязательно поступит отклик от менеджера ресурсов.

Модель модифицирована - запускается только один процесс, моделирующий функцию, на котором проверяется свойство.

#define start (model@B)

#define end (model@END)

#define allc (model@ALLC)

#define allc_ok (model@ALLC_OK)

#define ffree (model@FFREE)

#define ffree_ok (model@FFREE_OK)

/* ![](start -> (((allc -> (!end U allc_ok))&&(ffree -> (!end U ffree_ok))) U end)) */

4.В критической секции (между вызовами spin_lock* и spin_unlock*) может находиться не более одного процесса.

#define lock_1 (model[1]@LOCK1 || model[1]@LOCK2 || model[1]@LOCK3 || model[1]@LOCK4 || model[1]@LOCK5 || model[1]@LOCK6)

#define lock_2 (model[2]@LOCK1 || model[2]@LOCK2 || model[2]@LOCK3 || model[2]@LOCK4 || model[2]@LOCK5 || model[2]@LOCK6)

/* <>(lock_1 && lock_2) */

5.В ходе выполнения тела функции, функция kfree вызывается не более одного раза.

Модель модифицирована - запускается только один процесс, моделирующий функцию, на котором проверяется свойство.

#define start (model@B)

#define end (model@END)

#define free (model@FFREE)

/* ![](start -> (ffree -> (!ffree U end))) */

task5_nonprogress_out

(Spin Version 5.2.4 -- 2 December 2009)

+ Partial Order Reduction

Full statespace search for:

never claim +

assertion violations+ (if within scope of claim)

non-progress cycles + (fairness disabled)

invalid end states- (disabled by never claim)

State-vector 40 byte, depth reached 1237, errors: 0

3382 states, stored (5028 visited)

9251 states, matched

14279 transitions (= visited+matched)

0 atomic steps

hash conflicts: 10 (resolved)

2.598memory usage (Mbyte)

unreached in proctype model

line 79, state 80, "-end-"

(1 of 80 states)

unreached in proctype manager

line 95, state 11, "-end-"

(1 of 11 states)

pan: elapsed time 0.024 seconds

pan: rate 209500 states/second

Картинка-подпись
Хочешь зарабатывать на СтудИзбе больше 10к рублей в месяц? Научу бесплатно!
Начать зарабатывать

Комментарии

Поделитесь ссылкой:
Рейтинг-
0
0
0
0
0
Поделитесь ссылкой:
Сопутствующие материалы
Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
436
Средний доход
с одного платного файла
Обучение Подробнее