£ukasz | 22 Aug 18:48 2009
Picon

multithreating HOWTO ? :)

Hi All.
I'm trying to start writing multithread programs with assembler (no pthreads), i want to just ask what is
wrong in folowing simple code:

.section .data

signal1:
.quad	1

signal2:
.quad	1

x:
.quad	0

y:
.quad	0

.section .text
.globl _start
_start:
    nop
    movq	$2,%rax           # sys_fork
    xorq	%rbx,%rbx
    int		$0x80

    cmpq	$0,%rax
    jl		end

    cmpq	$0,%rax
(Continue reading)

£ukasz | 23 Aug 12:29 2009
Picon

Appendix: multithreating HOWTO ? :)

in appendix i want to just precize problem. Broblem is how to write, create etc, shared memory for parent and
child proceses, where they could for example exchange wariables

--- On Sat, 8/22/09, £ukasz <blurrpp <at> yahoo.com> wrote:

> From: £ukasz <blurrpp <at> yahoo.com>
> Subject: multithreating HOWTO ? :)
> To: linux-assembly <at> vger.kernel.org
> Date: Saturday, August 22, 2009, 6:48 PM
> Hi All.
> I'm trying to start writing multithread programs with
> assembler (no pthreads), i want to just ask what is wrong in
> folowing simple code:
> 
> 
> .section .data
> 
> signal1:
> .quad    1
> 
> signal2:
> .quad    1
> 
> x:
> .quad    0
> 
> y:
> .quad    0
> 
> .section .text
(Continue reading)

Claudio Fontana | 23 Aug 15:35 2009
Picon

Re: Appendix: multithreating HOWTO ? :)

£ukasz wrote:
> in appendix i want to just precize problem. Broblem is how to write, create etc, shared memory for parent
and child proceses, where they could for example exchange wariables

You are using fork. Fork is used to create new processes.
You probably want clone instead, to create new threads and specify
which resources to share between the two threads.

man 2 clone

sys_clone is 120 (0x78).

--
To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
the body of a message to majordomo <at> vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Claudio Fontana | 23 Aug 17:23 2009
Picon

Re: Appendix: multithreating HOWTO ? :)

On Sun, Aug 23, 2009 at 5:04 PM, Frank Kotler<fbkotler <at> zytor.com> wrote:
> Claudio Fontana wrote:
>>
>> Łukasz wrote:
>>>
>>> in appendix i want to just precize problem. Broblem is how to write,
>>> create etc, shared memory for parent and child proceses, where they could
>>> for example exchange wariables
>>
>> You are using fork. Fork is used to create new processes.
>> You probably want clone instead, to create new threads and specify
>> which resources to share between the two threads.
>>
>> man 2 clone
>>
>> sys_clone is 120 (0x78).
>
> Is that a 64-bit sys_call number? I thought they'd changed that on us.
> AFAIK, __NR_clone is 56 these days... and "syscall" replaces int 0x80. A
> real "curve ball" to asm programmers! Well, they *told* us not to do it that
> way. :)
>
> Best,
> Frank

I am still on good old 32bit. On 64 bit system call numbers are indeed
completely different.
--
To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
the body of a message to majordomo <at> vger.kernel.org
(Continue reading)

Frank Kotler | 23 Aug 17:04 2009

Re: Appendix: multithreating HOWTO ? :)

Claudio Fontana wrote:
> £ukasz wrote:
>> in appendix i want to just precize problem. Broblem is how to write, 
>> create etc, shared memory for parent and child proceses, where they 
>> could for example exchange wariables
> 
> You are using fork. Fork is used to create new processes.
> You probably want clone instead, to create new threads and specify
> which resources to share between the two threads.
> 
> man 2 clone
> 
> sys_clone is 120 (0x78).

Is that a 64-bit sys_call number? I thought they'd changed that on us. 
AFAIK, __NR_clone is 56 these days... and "syscall" replaces int 0x80. A 
real "curve ball" to asm programmers! Well, they *told* us not to do it 
that way. :)

Best,
Frank

--
To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
the body of a message to majordomo <at> vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

£ukasz | 23 Aug 18:17 2009
Picon

Re: Appendix: multithreating HOWTO ? :)

thanks for answer, im experiment with system clone ( actualy fork i found in many manuals ) but i dont
understand Frakns last sentence
"Well, they *told* us not to do it that way. :)", to program multiproceses with fork ? Any way is there any way
to make share memory for proceses ?

Lukas

--- On Sun, 8/23/09, Claudio Fontana <claudio.fontana <at> gmail.com> wrote:

> From: Claudio Fontana <claudio.fontana <at> gmail.com>
> Subject: Re: Appendix: multithreating HOWTO ? :)
> To: "Frank Kotler" <fbkotler <at> zytor.com>
> Cc: "£ukasz" <blurrpp <at> yahoo.com>, linux-assembly <at> vger.kernel.org
> Date: Sunday, August 23, 2009, 5:23 PM
> On Sun, Aug 23, 2009 at 5:04 PM,
> Frank Kotler<fbkotler <at> zytor.com>
> wrote:
> > Claudio Fontana wrote:
> >>
> >> Łukasz wrote:
> >>>
> >>> in appendix i want to just precize problem.
> Broblem is how to write,
> >>> create etc, shared memory for parent and child
> proceses, where they could
> >>> for example exchange wariables
> >>
> >> You are using fork. Fork is used to create new
> processes.
> >> You probably want clone instead, to create new
(Continue reading)

£ukasz | 23 Aug 21:13 2009
Picon

Re: Appendix: multithreating HOWTO ? :)

more info for example.

http://stackoverflow.com/questions/807506/threads-vs-processes-in-linux

as u see with litle work i can create process (fork) from thread (clone), i have to make some changes in systme
tables etc. now need to read little more kernel sys call source.

--- On Sun, 8/23/09, Claudio Fontana <claudio.fontana <at> gmail.com> wrote:

> From: Claudio Fontana <claudio.fontana <at> gmail.com>
> Subject: Re: Appendix: multithreating HOWTO ? :)
> To: "Frank Kotler" <fbkotler <at> zytor.com>
> Cc: "£ukasz" <blurrpp <at> yahoo.com>, linux-assembly <at> vger.kernel.org
> Date: Sunday, August 23, 2009, 5:23 PM
> On Sun, Aug 23, 2009 at 5:04 PM,
> Frank Kotler<fbkotler <at> zytor.com>
> wrote:
> > Claudio Fontana wrote:
> >>
> >> Łukasz wrote:
> >>>
> >>> in appendix i want to just precize problem.
> Broblem is how to write,
> >>> create etc, shared memory for parent and child
> proceses, where they could
> >>> for example exchange wariables
> >>
> >> You are using fork. Fork is used to create new
> processes.
> >> You probably want clone instead, to create new
(Continue reading)

Frank Kotler | 23 Aug 21:18 2009

Re: Appendix: multithreating HOWTO ? :)

£ukasz wrote:
> thanks for answer, im experiment with system clone ( actualy fork i found in many manuals ) but i dont
understand Frakns last sentence
> "Well, they *told* us not to do it that way. :)", to program multiproceses with fork ? Any way is there any way
to make share memory for proceses ?

Just a "joke". I meant, using the int 80h (or syscall) interface. We're 
"supposed" to use the C interface.

Like Claudio, I'm a "32-bit guy" - and I don't know how to do 
multithreading even on 32-bit. But I think if you're going to use 64-bit 
registers, you'll have to use 64-bit sys_call numbers, put the 
parameters in regs compatible with the 64-bit ABI, and use "syscall" 
instead of "int 0x80". I don't think what you're doing will work, but 
I'm not equipped to try it.

You can share memory between processes by memmapping a region and 
flagging it MAP_SHARED (sys_fork or even separate executables). I 
*think* for threads, you'd want sys_clone, and all memory would be 
shared(?). I think your issue is going to be keeping your threads from 
read/writing the same memory at the same time. I'm a "single CPU guy", 
too, but I think multi-CPU is going to be "even worse".

I made an example using pthread_create - not that I want to use it 
either, but to see what it does for us. Easier to read the source, I'm 
sure, but no, I ran it in strace. Doing a bunch of "signal related" 
stuff I don't understand. I'm afraid I'm going to have to learn more 
about "signals" before I can proceed with this...

For those of us who need to learn about 64-bit programming, there's a 
(Continue reading)

linuxasm@gmail.com | 23 Aug 23:02 2009
Picon

Re: Appendix: multithreating HOWTO ? :)

On Sunday 23 August 2009 09:17:59 £ukasz wrote:
> thanks for answer, im experiment with system clone ( actualy fork i found
> in many manuals ) but i dont understand Frakns last sentence "Well, they
> *told* us not to do it that way. :)", to program multiproceses with fork ?
> Any way is there any way to make share memory for proceses ?i

There are several ways to do shared memory.  If using a "fork"
the asmlib functions:
  shared_open
  shared_attach
  shared_close
provide some example code.
see http://linuxasmtools.net  download asmlib and look memory funcitons.
all the best, jeff
--
To unsubscribe from this list: send the line "unsubscribe linux-assembly" in
the body of a message to majordomo <at> vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Gmane