Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Oct 31, 2020 11:19 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 1140 posts ]  Go to page Previous 159 60 61 62 6376 Next
Author Message
PostPosted: Sat Nov 02, 2013 1:54 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
0CodErr wrote:
Покажи тогда, в каком месте это происходит.

Ты сначала напиши нормальный пример с выделением нормального стека под первый процесс и выделением независимых стеков под остальные. Докажи, что я не прав, а потом будем разбираться дальше.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sat Nov 02, 2013 1:56 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Mario_r4, зачем выделять память, если она не используется?


Top
   
PostPosted: Sat Nov 02, 2013 3:34 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Mario_r4, вот такой ещё вариант:
Spoiler: Show
Code:
ORG 0
BITS 32
; --------------------------- ;
STACK_SIZE     equ 256
; --------------------------- ;
MENUET01       db 'MENUET01'
version        dd 1
program.start  dd START
program.end    dd END
program.memory dd END + STACK_SIZE
program.stack  dd END + STACK_SIZE
program.params dd 0
program.path   dd 0
; --------------------------- ;
START:
; heap.initialize
        mov    eax, 68
        mov    ebx, 11
        int    64   
NEXT:
; memory.allocate
        mov    eax, 68
        mov    ebx, 12
        mov    ecx, 4096
        int    64
; thread.create
        lea    edx, [eax + 2048]
        mov    eax, 51
        mov    ebx, 1
        mov    ecx, THREAD
        int    64
        jmp    NEXT
THREAD:
; memory.free
        mov    eax, 68
        mov    ebx, 13
        lea    ecx, [esp - 2048]
        int    64   
        or     eax, -1
        int    64
; --------------------------- ;
END:

В Qemu вылетело:
Spoiler: Show
Attachment:
1.PNG
1.PNG [ 28.85 KiB | Viewed 1903 times ]

Я ещё не написал, что после вылета ни мышь, ни клавиатура не работают, но в CPU продолжается отрисовка.

Другой пример, в отличие от предыдущего, он запускает приложение, а не создаёт поток:
Spoiler: Show
Code:
ORG 0
BITS 32
; --------------------------- ;
STACK_SIZE     equ 256
; --------------------------- ;
MENUET01       db 'MENUET01'
version        dd 1
program.start  dd START
program.end    dd END
program.memory dd END + STACK_SIZE
program.stack  dd END + STACK_SIZE
program.params dd 0
program.path   dd 0
; --------------------------- ;
START:
; file.run
        mov    ebx, .file_info
        mov    eax, 70
        int    64
        jmp    START
; --------------------------- ;
.file_info:
        dd     7
        dd     0
.params:
        dd     sz_empty
        dd     0
        dd     0
        db     0
.file_path:
        dd     sz_just_terminate
; --------------------------- ;
sz_empty  db 0
sz_just_terminate  db "/sys/just_terminate.kex",0
; --------------------------- ;
END:
Ниже код just_terminate.kex
Code:
ORG 0
BITS 32
; --------------------------- ;
MENUET01       db 'MENUET01'
version        dd 1
program.start  dd START
program.end    dd END
program.memory dd END
program.stack  dd END
program.params dd 0
program.path   dd 0
; --------------------------- ;
START:
        or     eax, -1
        int    64
; --------------------------- ;
END:

Этот пример у меня до сих пор работает в VirtualBox без вылетов:
Spoiler: Show
Attachment:
2.PNG
2.PNG [ 40.74 KiB | Viewed 1903 times ]


Top
   
PostPosted: Sat Nov 02, 2013 7:28 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
0CodErr wrote:
Этот пример у меня до сих пор работает в VirtualBox без вылетов:
Вылетов так и не было. Последний скриншот CPU оттуда:
Spoiler: Show
Attachment:
CPU(VirtualBox).PNG
CPU(VirtualBox).PNG [ 29.41 KiB | Viewed 1879 times ]
Заметно, что cpu-usage у @icon больше, чем обычно. Я решил запустить пример на реальной системе. Вот скриншот CPU:
Spoiler: Show
Attachment:
CPU(real).PNG
CPU(real).PNG [ 22.58 KiB | Viewed 1879 times ]
Также в VirtualBox в это время заметно мерцание указателя мыши даже в неподвижном состоянии. Я думаю, связано это с тем, что даже не имеющий окна запускаемый поток вызывает «деактивацию» активного в текущий момент окна приложения, а это влечёт за собой смену указателя мыши на указатель по умолчанию и его перерисовку. Например, нажав среднюю кнопку мыши в fNav, можно заметить, как изменяется указатель мыши.
Такая «деактивация» делает проблематичным нажатие на кнопки в приложениях даже на реальной системе.


Top
   
PostPosted: Sat Nov 02, 2013 7:54 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
1) Вот зачем удалять память выделенную под стек потока, если он еще не завершен? Ты сам себе противоречишь. Если уж хочешь сэкономить память, то сделай мьютекс - потоки будут запускаться друг за другом, последовательно используя одну область памяти.
2) В случае запуска постороннего приложения используется другое адресное пространство приложения и оно никак не пересекается с адресным пространством запускающего.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sat Nov 02, 2013 8:41 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Mario_r4 wrote:
Ты сам себе противоречишь.
По-моему всё-таки ты :)
viewtopic.php?f=2&t=2157&start=15#p43922
Mario_r4 wrote:
johnfound писал(а):
Но поток не может освободит свой собственный стек.
А другие потоки приложения просто не знают что поток завершился. Как быть?

Отчего же?
Код:
mcall 68,13,[thread_stack_2]
mcall -1 ; close this program

В zSea у меня это вполне работает.


Top
   
PostPosted: Sat Nov 02, 2013 8:57 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
0CodErr wrote:
По-моему всё-таки ты

Точно я? Ну, ладно - ты меня подловил.

Тогда остается предположение, что количество порожденных потоков на родительский поток величина конечная. Можно сделать счетчик выводящий на доску отладки сообщение о том какой это номер порожденного потока, чтобы установить ограничение если оно есть. А генерацию потоков ограничить циклом в пару тысяч повторений - вероятно этого будет достаточно.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Mon Nov 04, 2013 8:15 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Тогда остается предположение, что количество порожденных потоков на родительский поток величина конечная
Таких ограничений нет.


Top
   
PostPosted: Thu Nov 07, 2013 10:15 pm 
Offline
KSoC/GSoC Student

Joined: Wed Jul 11, 2012 3:17 am
Posts: 224
SEND:
Spoiler: Show
Code:
    mov     eax,68
    mov     ebx,11
    int     0x40

    mov     eax,68
    mov     ebx,22
    mov     ecx,share_area
    mov     edx,4
    mov     esi,0x04; SHM_OPEN_ALWAYS
    int     0x40

    mov     [share_ptr],eax
    mov     eax,[share_send]
    mov     [share_size],edx
;======================
    share_size   dd 0
    share_ptr    dd 0
    share_send   dd 0x274854

RECEIVE
Spoiler: Show
Code:
    mov     eax,68
    mov     ebx,11
    int     0x40

    mov     eax,68
    mov     ebx,22
    mov     ecx,share_area
    mov     edx,4
    mov     esi,0x00    ;SHM_READ
    int     0x40

    mov     [share_ptr],eax
    mov     eax,share_ptr
    mov     [share_rec],eax
    mov     [share_size],edx
;======================
    share_size   dd 0
    share_ptr    dd 0
    share_rec    dd 0

Вопрос: в каком месте мне руки отрубать)))


Attachments:
error.png
error.png [ 3.44 KiB | Viewed 1776 times ]
Top
   
PostPosted: Thu Nov 07, 2013 10:28 pm 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Akyltist
А в чем проблема? В обоих случаях область подключена.
А если ты к тому что ничего не засылается и не считывается, так ты в обоих примерах ничего в область не засылаешь и ничего не считываешь.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
PostPosted: Sun Nov 10, 2013 7:39 pm 
Offline

Joined: Fri Feb 15, 2013 8:23 pm
Posts: 77
Как запустить программу на ассемблере там функция 70 а что посылать не знаю?


Top
   
PostPosted: Sun Nov 10, 2013 7:50 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Unusual, ты параметры что ли хочешь послать?
Например, исходник Run:http://websvn.kolibrios.org/filedetails.php?repname=Kolibri+OS&path=%2Fprograms%2Fsystem%2Frun%2Ftrunk%2Frun.asm


Top
   
PostPosted: Sun Nov 10, 2013 7:53 pm 
Offline
User avatar

Joined: Sat Oct 05, 2013 9:32 pm
Posts: 386
Code:
    mov     dword[fi.p00], 7
    mov     dword[fi.p08], sz_param
    mov     dword[fi.p21], sz_file

    mcall   70, fi
 
; =========================
sz_file:
    db      "@notify", 0
sz_param:
    db      "Hello, world!!!", 0
; =========================
fi:
 .p00:
    rd       1
 .p04:
    rd       1
 .p08:
    rd       1
 .p12:
    rd       1
 .p16:
    rd       1
 .p20:
    rb       1
 .p21:
    rd       1


Top
   
PostPosted: Mon Nov 11, 2013 11:52 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5292
Code:
======================================================================
= Функция 68, подфункция 27 - загрузить файл ===================
======================================================================
Параметры:
  * eax = 68 - номер функции
  * ebx = 27 - номер подфункции
  * ecx = указатель на ASCIIZ-строку с именем файла
Возвращаемое значение:
  * eax = указатель на загруженный файл или 0
  * edx = размер загруженного файла или 0
Примечания:
  * функция загружает и, при необходимости, распаковывает файл (kunpack)

Кто-то может объяснить, что делает эта функция? Чем она отличается от "70.0 - чтение файла с поддержкой длинных имён"? Тем, что во время загрузки файла может его распаковать?

_________________
Звиздеть не мешки ворочать


Top
   
PostPosted: Tue Nov 12, 2013 12:04 am 
Offline
Kernel Developer

Joined: Sun Feb 10, 2013 12:37 pm
Posts: 2329
Leency wrote:
Тем, что во время загрузки файла может его распаковать?

Да.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1140 posts ]  Go to page Previous 159 60 61 62 6376 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited