00:00:00 --- log: started osdev/02.04.02 00:02:20 --- join: MangoMan (MangoMan@modem-861.blotto.dialup.pol.co.uk) joined #osdev 00:12:45 --- join: MangoMan_ (MangoMan@modem-1050.alakazam.dialup.pol.co.uk) joined #osdev 00:18:19 --- join: zooy0rk (~zooy0rk@c-24-98-76-121.atl.client2.attbi.com) joined #osdev 00:20:31 --- quit: trans (Read error: 110 (Connection timed out)) 00:22:56 --- quit: MangoMan (Read error: 110 (Connection timed out)) 00:28:53 --- nick: MangoMan_ -> MangoMan 00:45:39 --- quit: Downix ("Downix has no reason") 00:54:28 --- join: jewel (~jleuner@spamisevil.test.ie.vianw.net) joined #osdev 01:20:57 --- join: rob_ert (~robert@h237n2fls31o965.telia.com) joined #osdev 01:25:08 tum tee tum 01:25:10 --- join: geist-hiptop (~ircuser@future-is.orange.co.uk) joined #osdev 01:25:35 --- part: geist-hiptop left #osdev 01:28:41 --- join: trans (~trans@a2a02274.intergate.bconnected.net) joined #osdev 02:35:38 --- quit: MangoMan (Read error: 104 (Connection reset by peer)) 02:35:38 --- quit: zooy0rk (Read error: 104 (Connection reset by peer)) 02:53:48 --- quit: trans (Read error: 110 (Connection timed out)) 03:20:40 --- join: MangoMan (MangoMan@modem-1232.abra.dialup.pol.co.uk) joined #osdev 03:20:42 Hey all 03:20:56 Hi 03:21:30 =) 03:23:26 do you know what "something = *value & 255" would do? 03:24:24 Yes. 03:24:32 hehe 03:24:44 something = [whatever value points to] mod 256 03:24:50 ah right 03:25:14 thanks 03:25:50 "&" isn't mod 03:25:58 hehe 03:26:07 & is bitwise and 03:26:11 * MangoMan is now confused 03:26:37 you know about bit operations? 03:26:43 barely ^_^ 03:27:13 well, *value & 255 takes whatever value points to and performs a bitwise "and" operation with it and 256 03:27:46 ah 03:29:18 Uh 03:29:18 --- join: trans (~trans@a2a02274.intergate.bconnected.net) joined #osdev 03:29:19 No 03:29:21 255 03:29:38 It ANDs with 255 03:29:50 Which is the same as doing modulo division with 256 03:30:38 oh ok 03:30:43 I'm using a small font :) 03:31:00 thanks for the explanation =) 03:32:52 witten: :P 03:40:50 --- join: zooy0rk (~zooy0rk@c-24-98-76-121.atl.client2.attbi.com) joined #osdev 04:09:57 --- quit: zooy0rk (Read error: 104 (Connection reset by peer)) 04:28:39 --- quit: trans (Read error: 110 (Connection timed out)) 04:29:24 --- quit: MangoMan (Read error: 110 (Connection timed out)) 05:08:10 --- nick: eks[Zzzzz] -> eks[away] 05:08:46 Byebye eksie 05:16:42 Do firewalls also filter out outgoing traffic? 05:41:22 --- join: trans (~trans@a2a02274.intergate.bconnected.net) joined #osdev 05:42:06 --- join: zooy0rk (~zooy0rk@c-24-98-76-121.atl.client2.attbi.com) joined #osdev 05:47:45 of course robert 05:50:37 :) 05:51:46 has anyone here tried AROS? 06:20:12 --- quit: zooy0rk (Read error: 104 (Connection reset by peer)) 06:38:12 --- quit: trans (Read error: 110 (Connection timed out)) 07:15:07 --- nick: eks[away] -> eks 07:34:51 --- quit: gab (Read error: 104 (Connection reset by peer)) 07:50:52 --- join: zooy0rk (~zooy0rk@c-24-98-76-121.atl.client2.attbi.com) joined #osdev 07:52:18 --- join: trans (~trans@a2a02274.intergate.bconnected.net) joined #osdev 07:57:14 --- quit: eks ("giving a try to gentoo") 08:01:20 --- join: eks (~eks@h24-82-199-179.wp.shawcable.net) joined #osdev 08:02:28 wb :) 08:02:32 How's gentoo? 08:03:18 it requires a reiserfs 08:03:23 otherwise I got it booting :) 08:03:43 dunno if it will install though, I quite hacked the boot sequence :p 08:05:09 Hehe 08:07:07 the iso comes with 'isolinux', a 'kernel' and a .tbz2 08:07:28 so I created a file system, extracted the .tbz2 on it, copied over the kernel and gave it a boot with grub 08:07:47 now.. hrm.. does grub supports reiserfs... hrm... 08:20:54 I think the newer ones do 08:21:40 yes, it does support it :) 08:21:53 I have a cool 'reiser-stage1.5' file in /boot/grub :) 08:22:57 --- quit: eks ("leaving") 08:24:35 --- join: eks (~eks@h24-82-199-179.wp.shawcable.net) joined #osdev 08:27:10 hrm.. that doesn't look good.. 08:27:22 mount crashed when trying to mount a reiserfs partition :/ 08:36:47 --- quit: eks (Remote closed the connection) 08:40:56 --- join: I440r (~mark4@1Cust253.tnt1.bloomington.in.da.uu.net) joined #osdev 08:52:17 --- join: gab (~prfalken@gaia.chx-labs.org) joined #osdev 09:16:06 --- quit: I440r (No route to host) 09:22:10 --- join: corsairk8 (~localhost@pc-62-30-121-110-cr.blueyonder.co.uk) joined #osdev 09:28:59 --- join: Aardappel (~Aardappel@pD9587846.dip.t-dialin.net) joined #osdev 09:36:25 --- quit: trans (Read error: 110 (Connection timed out)) 10:08:26 --- quit: zooy0rk (Read error: 104 (Connection reset by peer)) 10:10:14 --- join: corsairk7 (~corsairk8@pc-62-30-121-110-cr.blueyonder.co.uk) joined #osdev 10:10:23 re 10:10:23 strange 10:10:30 how come ive not timed out? 10:13:28 --- quit: corsairk8 (Read error: 110 (Connection timed out)) 10:20:59 --- join: Downix (~downix@user-38ldcq6.dialup.mindspring.com) joined #osdev 10:22:59 hey everyone 10:38:07 HI 10:38:51 what's up? 10:42:05 I am...building a duke level :) 10:42:10 Duke3D simply rocks., 10:42:28 cool 10:50:39 --- join: ilian (~darklight@mitaka.spnet.net) joined #osdev 10:52:49 --- join: trans (~trans@a2a02274.intergate.bconnected.net) joined #osdev 11:30:16 --- join: zooy0rk (~zooy0rk@c-24-98-76-121.atl.client2.attbi.com) joined #osdev 11:43:48 --- join: Tony123 (~tony123@ACA30D0B.ipt.aol.com) joined #osdev 11:45:31 --- quit: Tony123 (Read error: 104 (Connection reset by peer)) 11:45:57 --- quit: trans (Read error: 110 (Connection timed out)) 11:59:31 --- nick: corsairk7 -> corsairk 12:13:27 --- join: MangoMan (MangoMan@modem-313.blotto.dialup.pol.co.uk) joined #osdev 12:13:30 hey 12:13:53 hey 12:15:35 =) 12:23:05 --- join: SoulTrace (SoulTrace@s13.mouseh.cluj.astral.ro) joined #osdev 12:23:10 hola 12:32:14 so quiet here 12:32:26 --- quit: SoulTrace () 12:34:47 ... 12:36:55 hey, any new os projects? 12:37:16 nope 12:37:53 whos creating an os here? 12:38:14 not I 12:44:39 i may be... for fun 12:45:42 ^_^ 12:53:14 --- quit: corsairk ("Oh my god, its the ANS Antanov... Gamma wing, take the capital ship, The vampires and us will defend the convoy!") 12:53:31 --- join: corsairk8 (~localhost@pc-62-30-121-110-cr.blueyonder.co.uk) joined #osdev 12:53:57 heya 12:54:04 hey 12:54:16 how are you :-) 12:58:10 great 12:58:26 thinking of new ways to design a gui mostly 13:01:14 --- quit: Downix ("Downix has no reason") 13:03:36 --- join: trans (~trans@a2a02274.intergate.bconnected.net) joined #osdev 13:06:19 *downloading xfree86-src* 13:06:23 =) 13:06:54 Takes bloody ages. 13:10:43 Nah.. It's going to compile as well.. I 13:10:55 I'll just go to bed.. 13:11:02 --- nick: slowcoder -> Zzzzlowcoder 13:12:14 --- quit: corsairk8 ("Damnit 45ths, weve taken a hit! Where is our fighter cover? One more hit and were finished! Ahhrhrrrghh, were going down... w) 13:16:30 --- join: corsairk8 (~localhost@pc-62-30-121-110-cr.blueyonder.co.uk) joined #osdev 13:27:07 --- join: wossname (wossname@HSE-Sherbrooke-ppp80048.qc.sympatico.ca) joined #osdev 13:32:16 mmmm 13:32:23 portabello and mozarella sandwich 13:36:46 --- quit: wossname ("y.sd") 13:37:51 --- quit: MangoMan (Read error: 104 (Connection reset by peer)) 13:46:02 --- quit: ilian ("bbl") 14:16:46 --- quit: zooy0rk (Read error: 104 (Connection reset by peer)) 14:47:31 --- join: knyx (dutkiewicz@26.portland-01rh15rt.or.dial-access.att.net) joined #osdev 14:53:43 --- join: Ubel (~root@arnarson.is) joined #osdev 14:59:34 --- quit: Ubel ("[BX] Reserve your copy of BitchX-1.0c18 for the Amiga today!") 15:15:43 --- join: caereth (caereth@lgh022a.robackshus3.ac.se) joined #osdev 15:15:51 hello there os developers 15:18:18 Hi there, caereth. 15:19:41 * caereth is stuck with task switching, "Does anybody have any nice examples?" 15:20:33 Using what method? 15:20:36 TSS or something? 15:20:48 well, what do you suggest? 15:20:58 Uh, no idea. 15:21:00 i guess i need atleast one TSS any way i do it 15:21:08 No. 15:21:12 Check ostling.no-ip.com for my solution. 15:21:17 (Primula is the name) 15:21:19 brb 15:21:24 to switch between privilege levels 15:25:59 --- quit: knyx (Read error: 113 (No route to host)) 15:27:11 hey rob_ert 15:27:12 * corsairk8 brb 15:27:17 rob_ert: i saw a nice example in some os 15:27:19 Hi 15:27:55 hi 15:29:22 brb 15:29:24 --- quit: caereth ("My damn controlling terminal disappeared!") 15:30:07 --- join: caereth (caereth@lgh022a.robackshus3.ac.se) joined #osdev 15:31:15 --- join: zooy0rk (~zooy0rk@c-24-98-76-121.atl.client2.attbi.com) joined #osdev 15:31:52 caereth: you can use the intel method described in chapter 4 of their manuals (on http://developer.intel.com) or the far jump method described on http://www.execpc.com/~geezer/osd/ 15:33:12 examples of both can be found on their respective sites 15:33:45 --- quit: trans (Read error: 110 (Connection timed out)) 15:35:56 --- quit: caereth ("#debian") 15:36:04 --- join: caereth (caereth@lgh022a.robackshus3.ac.se) joined #osdev 15:36:10 heh :-) 15:36:35 heh did you get that ? 15:36:37 that far jump method? how does it handle privileges? 15:36:48 it doesnt 15:36:58 it simple moves eip 15:37:01 then its not wanted :) 15:37:01 and reloads cs 15:37:14 if you want you can reload cr3 register to handle multiple address spaces 15:37:21 i want apps to run in ring 3 15:37:41 and you can use segmentation to stop code running privedged instructions 15:37:52 ie, ring 3 cant do port io, or change its control registers 15:39:02 caereth: since a far jump reloads cs, as well as eip, it will allow you to choose the code segment (ie, you should have one setup for at least ring 0 and ring 3 code/data) you want 15:39:18 if you have user space processes jump to your user space code segment (set at ring 3) you will be fine 15:39:35 if you want multiple address spaces (using paging) you can change cr3 which controls the page directory register 15:39:51 aye, paging works :) 15:39:56 :) 15:41:11 ive read that some people use one TSS for all their switching 15:42:23 yes, basically, TSS's are entries in your GDT that allow you to store the state of the CPU registers 15:42:34 nod, i know that much 15:42:49 but i dont really know about the stacks in the TSS 15:43:11 instead of doing a far jump to schedule, what you do is either jump to the tss entry point or set the irq handler to return to that location 15:43:19 (ie, by having that on the stack i think) 15:43:25 wait, lemme re-read the intel manual 15:43:39 maybe you have to have the segment address as the offset in the gdt for your TSS descriptor 15:44:27 boy, X11 sure is slow 15:44:53 nothing, lightning fast here 15:45:22 caereth: what cpu/video card/how much ram and what os/x11 version? 15:45:32 one thing you need to be careful of is having a stack for each priveledge level 15:45:37 debian GNU/linux.. geforce 2 mx 15:45:39 256mb ram 15:45:47 xf 4.something 15:45:57 cpu? 15:45:59 usually your main stack grows down from 0xffffffff (linux) or (0x80000000) and the stacks for syscalls (higher rings 0-2) can go in some system area 15:46:12 amd athlon 500@750mhz :-p 15:46:27 nothing, x11 is often slow if you use bad drivers 15:46:53 nvidias drivers rocks 15:47:55 caereth: one neat thing you can do in x86 hardware is i/o port mapping 15:48:27 bad drivers eh 15:48:35 i'm using the stock Nvidia server from xfree 15:48:47 they are bad 15:48:50 use nvidias drivers 15:48:56 the 3 main ways to switch tasks are using a call, jmp or iret operation though :) 15:49:06 --- join: witten_ (~witten@fire2.LINUX.UCLA.EDU) joined #osdev 15:49:34 you have to make sure you are transferring to control to tss:eip 15:49:50 where tss is the offset in the gdt to your tss descriptor rather than your segment descriptor 15:50:08 as the cpu will look at your tss for the descriptor it should be using to find the code/data/stack segments 15:50:26 --- quit: rob_ert ("(:") 15:51:09 about the stacks in the TSS, in some code ive seen people creating "kernel stack" for TSS'sss, now what is this for? 15:51:30 --- join: knyx (dutkiewicz@37.portland-06-07rs.or.dial-access.att.net) joined #osdev 15:51:31 or as its put, "When dispatching a task with a CALL or JMP instruction, the selector in the instruction may select either the TSS directly or a task gate that holds the selector for the TSS" 15:53:28 that reminds me, ive got to figure out how to use cpuid 15:53:36 thats not the problem.. 15:53:46 im mostly wondering about the stacks 15:53:55 ah, the stacks can be confusing :) 15:54:02 they usually start at the top of the logical address space and go down 15:54:16 other stacks usually dont need more than 2 pages of space 15:55:08 id give it 16 virtual pages, and grow it on demand though ;) 15:55:13 well, all the different stacks in the TSS, what are they for? 15:55:23 well, lets see 15:55:30 --- join: I440r (~mark4@1Cust145.tnt2.bloomington.in.da.uu.net) joined #osdev 15:55:31 if your TSS is for a ring 3 process 15:55:38 the stacks are for ring 0-2 calls 15:55:45 if your TSS is in ring 0, its for 1-3 15:55:51 if your TSS is in ring 1 15:55:57 its for 0, 2-3 15:56:06 if its in ring 2, its 0-1, 3 15:56:17 ok, you didnt have to say them all :) i can see the pattern, hehe 15:56:18 basically, its the other 3 priveledge levels stacks, starting from 9 15:56:20 basically, its the other 3 priveledge levels stacks, starting from 0 15:56:23 hehe :) 15:56:37 you can use ring 0 and ring 3 only if you want 15:56:38 --- quit: knyx () 15:56:41 or you can use all four 15:56:43 its really your choice 15:56:47 i find it simpler to use 2 15:57:00 but im most likely going to use all four 15:57:09 i will probably onlu use 0 and 3 15:57:25 0 = microkernel, 1 = kernel module, 2 = user module, 3 = user application 15:57:39 thats assuming i can stop 2 accessing hardware directly 15:59:22 id advise you if you plan to have any serious multi-tasking (with multiple processes) to work stable that you have a strong vm 15:59:28 as that controls your multiple address spaces 16:00:56 ohps, ive just realised lookign at this that ring 2 is for operating system services 16:01:00 having user-loaded modules is a bad idea :) 16:01:26 i might just have low level arch-dependant modules in ring 1, and modules that depend on the arch-depandant ones but will run on any arch with that implemented on, in ring 2 16:02:44 ah, did you know if you try to execute a priveledged instruction when not in ring 0 you get a #GP (general protection fault) 16:02:45 ? 16:04:01 pretty cool imo 16:05:45 what constitutes a privileged instruction? 16:07:20 lets see 16:07:28 there are many 16:07:38 attempting to use mov on a debug register, or control register 16:08:03 lgdt/lidt 16:08:09 (as it could obviosly crash teh computer) 16:08:17 okay 16:08:20 corsairk8: bad idea 16:08:42 u should only support ring 0 and ring3 16:08:47 lldt/ltr/lmsr/clts/invd 16:08:48 a few others 16:08:52 why air? 16:09:10 other procs dont have 4 rings 16:09:20 they have supervisor and user 16:09:35 what do you mean by that? 16:09:58 oh you mean it wont work on other processors without 4 rings 16:09:59 other cpus, non-ia32, only have two rings 16:10:11 yeh, well, this kernel is for intel x86 and compatible :) 16:10:21 bad idea 16:10:25 why is that? 16:10:38 ia32 stinks 16:10:40 heh 16:10:47 yes, but its what ive got access too 16:10:50 * corsairk8 is inspired to l4 16:10:59 my microkernel will be as tiny as possible 16:11:06 although other things are done differently 16:11:28 (ie, core modules being integrated into a flat 32-bit address space) 16:11:44 but really, the microkernel and a hand full of modules take care of all the architecture dependant stuff 16:11:59 and hopefully thats going to be smaller than linux's arch/ directory for most platforms 16:12:09 the main os stuff, the reusable stuff will be in seperate modules 16:12:35 how do the modules communicate? 16:13:09 well 16:13:12 thats a very good question 16:13:21 ill begin explaining... 16:14:02 the omikron module system uses a single 32-bit address space and a low-level run-time dynamic link agent (rtdla) 16:14:33 there are a list of interfaces, such as bus, disk, char, video, timer for any type of device 16:14:36 and a set of implementations in modules 16:14:51 the linker resolves inter-module dependancies and allows modules to simple call each others functions 16:14:56 via these pre-defined interfaces 16:15:11 the aim is for them to be as small and simple as possible 16:15:25 all disk modules use the same interface (to provide, read/write/seek/reset/etc) 16:16:24 all kvm (kernel virtual manager, responsible for virtual memory management, segment management, and scheduling) modules use the same interface (one implementation for each platform) 16:16:35 all file systems use the same interface (ie, ext2, vfat, minix, nfs) 16:16:45 so it's just direct function calls? no message passing? 16:16:51 thats correct 16:16:54 cool 16:17:00 its incredibly fast 16:17:04 yet still modular 16:17:16 also, im thinking of having half-linking 16:17:26 half-linking? 16:17:35 hah 16:17:37 actually, i wont go into that right now, its still at the chalk-board stage 16:17:38 half linking 16:17:41 its a little complex 16:17:41 incredibily fast? 16:17:54 not sure if its actually theasable 16:17:59 who will be callingthese modules? 16:18:05 thats the aim of omikron of coarse 16:18:10 air: well, its setup like so 16:18:37 air: he's going to adopt the brix-model 16:18:45 where it all runs in one address space 16:18:53 and system calls are done as function calls 16:18:55 do the user apps call these module functions directly? 16:19:06 boot loader is run by system, that loads up several modules from the file system, it will then load teh kvm module, which will in turn load all archecture core modules 16:19:10 nothing: not quite, so shut up 16:19:29 once the system is at a stage where it can read the file system, it will read the system register database, load any other modules, and pass control to /omikron/bin/init 16:19:45 the dynamic linker may very will be implemented as a software interrupt setup by the boot loader stage 2 16:20:00 nothing: no, not at all 16:20:15 nothing: the main kernel uses 1 address space for speed 16:20:21 it can use multiple threads in that address space 16:20:26 u still havent answered my question 16:20:34 air: i was joking 16:20:36 and at its leasure, it can spawn additional processes, in ring 0 or 3 to do jobs 16:20:44 those functions that are directly called, who calls them 16:20:53 air: modules call each other 16:21:14 ie, if the scheduler module wants to initiate, it calls the pit::hook_callback function 16:21:22 ohps, timer::hook_callback 16:21:24 my user app wants to read from the video device, how do i do that 16:21:27 the pit is the implementation of timer 16:21:39 air: map it into memory and let it read it? 16:21:51 --- quit: witten_ ("bye") 16:21:56 did that answer your question? 16:22:00 no 16:22:14 what do you mean by how calls them? 16:22:30 do u know that ring3 cant call the other rings without using a callgate? 16:22:41 --- join: witten_ (~witten@131.179.104.17) joined #osdev 16:22:46 air: what's wrong with using all 4 rings? 16:22:47 yup air 16:23:04 air: the primary kernel process (one started by kvm/bootloader) runs in ring 0 16:23:10 callgate = 44+7 cycles 16:23:28 call = 1+2 16:23:34 i dont understand :( 16:23:48 ok 16:24:10 call 0x1000 ; 1 cycle for the static call and 2 for the return 16:24:23 all type-1 modules are loaded into the same address space as the kernel, and in the same segment 16:24:34 call [0x1000] ; 2 cycles for the dynamic call and 2 for the return 16:24:44 those only work in the same ring 16:24:50 u cant cross rings with those 16:24:56 i know 16:25:00 but all kernel modules are in ring 0 16:25:09 except for user modules, which are in ring 3 16:25:26 although those are compeltely different, and they arent for speed critical things like the scheduler or device i/o 16:25:28 call callgate_selector:[0x1000] ; 44 cycles for a cross-ring dynamic call and 7 for the return 16:25:40 i know what you mean 16:25:51 it is not incredibly fast 16:26:01 but after dynamic linking has taken place, it will be as if they were the same binary 16:26:12 it can simple call the address where the proc resides 16:26:19 oh dear 16:26:20 and i think u will need a callgate for each call 16:26:21 i forgot almost 16:26:29 it will need to patch the existing binaries :) 16:26:34 or load them into preferred addresses 16:26:42 that is what is the complicated part of my system 16:27:07 i think it ignores the offset used with the callgate selector cuz that would be unsafe 16:27:09 * corsairk8 thinks 16:27:15 yeh 16:27:38 yer gonna be in callgate hell with all those callgates 16:27:38 i might actually use a dynamic call for interfacing 16:28:07 its still very fast compared to a callgate 16:28:17 it would be easier if u use one callgate per module and have the app pass a function ID 16:28:34 heh 16:28:42 u cant use direct calling 16:28:55 callgate is the only way 16:29:03 why? 16:29:16 i can use a call [0x1000] 16:29:29 because u said the modules are in a ring1 and user apps are ring3 16:29:40 u CANT call across rings 16:29:42 heh 16:29:55 your right, i said that before 16:30:05 * corsairk8 thinks 16:30:14 but im keeping modules in ring 0 16:30:14 then 16:30:22 theres no point being in ring 1 16:30:35 ring 0 and ring 3 are the only ones im using really 16:31:03 ill either modify the executable for eks-style self-modifying code 16:31:11 which would requrie extreme skill 16:31:19 or use indirect calling 16:31:28 i might give self-modifying code a try actually 16:31:34 i donno though 16:31:38 it dont matter how u resolve the dynamic linking, u CANT call across rings 16:31:44 i know i know 16:31:49 im keeping it all in ring 0 16:32:02 so now yer dumping ring3? 16:32:13 hehe, ring 3 is for apps :) 16:32:25 u just said 'all' :) 16:32:33 lol 16:32:36 all modules 16:32:37 u might wanna look up the meaning 16:33:08 i dont care what ring u keep them in, ring3 cant call em 16:33:14 either way, im pretty sure with dynamic linking the way im thinking, it will be extremely fast 16:33:21 and could beat linux in terms of speed 16:33:28 no 16:34:01 air thinks brix is going to be blazingly fast 16:34:02 it will be slightly faster 16:34:07 heh :) 16:34:08 but he's focusing on the x86 optimizations too much 16:34:10 nothing: it will be 16:34:16 thinking about it, i cant really avoid using direct call's 16:34:20 i have to call addresses :( 16:34:29 but apparently that wrecks havok with caching 16:34:34 air: will it be just as fast on an ultrasparc? on an alpha? 16:34:47 corsairk8: only brix can use static (1 cycle) calls 16:34:52 then again, modifying the code during run-time thrashes cache too 16:35:01 air: how? 16:35:26 actually, thinking about it, i might just hardcode call addresses 16:35:31 the only way u can use dynamic (2 cycle) calls if for libraries that u link into ring3 with the user app 16:35:49 hardcoding is not flexible, cept in brix :) 16:35:53 arg, the dilemmas 16:35:59 hehe air 16:36:29 crush controls all code and keeps a list of all calls and can modify addresses if they change 16:36:31 nothing: nobody uses those platforms 16:36:40 ck8: uh 16:36:56 nothing: yes it will 16:36:58 id personally rather have a blazing fast os on x86 than have teh developers spread them selves thin trying to optimise for every platform out there 16:37:02 ck8: just because you don't, and your school buddies don't, doesn't mean that they are unused 16:37:22 hehe 16:37:30 im sure you could say the same with 8086 16:37:41 ohps 16:38:00 crush uses a 3-stage assembler, first and third stages are required 16:38:06 well, anyway, people are free to do whatever they want 16:38:25 first stage parses asm code into lists, third stage converts it to machine code 16:38:25 but i dont haev access to those other platforms, and quite frankly, i dont have the time to waste learning the ins and outs of them to get my os working smoothly 16:38:34 on them 16:38:44 the second stage handles optimization, instruction removal and reordering 16:38:59 cool air :) 16:39:06 so crush can be lazy and output highly unoptimzed sloppy slow asm 16:39:14 heh 16:39:17 id never write a language 16:39:22 there aer so many good ones 16:39:54 (push eax)(pop eax)(add eax 1) 16:40:15 it will see the push/pop and remove 16:40:18 sub eax, -1 16:40:31 how can you program it so smartly air? 16:40:44 its quite easy if u think about it 16:40:48 no smarts required 16:40:53 really? 16:40:55 how? 16:41:00 think about it 16:41:01 ah i know 16:41:04 run it through a virtual machine 16:41:08 if after the instructions 16:41:11 the registers are the same 16:41:19 you obviosly dont need them 16:41:22 not quite but yer close 16:41:25 :) 16:41:27 uhm... 16:41:30 u have the general idea 16:41:35 ah cool 16:42:18 im really wondering how to implement dynamic linkage for multiple modules 16:42:33 using call [x] is really really bad on the process caching 16:42:38 processor 16:42:47 corsairk8, that wouldnt always work i you have some conditional things in the code 16:42:49 hhaha 16:42:53 u still dont get it 16:42:57 get what air? 16:43:18 user apps cant use call[x] to call modules 16:43:28 user apps wont be calling modules 16:43:36 they have to use call selector:0x0 16:43:52 if a user app wants to communicate with the kernel, it needs to use either a software interrupt, call gate or sysenter/sysexit instruction 16:44:09 uhh 16:44:15 so yer doing it like linux 16:44:15 it can then transfer its general purpose registers over to the global kernel system call handler 16:44:22 usre calls kernel which calls driver 16:44:38 where IT then communicates with the modules (modules can actually request to have a pointer to a syscall entry point put in, but thats another story) 16:44:43 yes air 16:44:50 so same speed as linux 16:44:57 thats the idea :) 16:45:17 before u said apps would use "encridibly fast" direct calls to modules 16:45:21 --- quit: Aardappel ("http://wouter.fov120.com/") 16:45:27 hehe, where did i say that air? 16:45:30 please quote me? 16:45:34 i did 16:45:48 how long ago was it i said that? 16:45:53 so it's just direct function calls? no message passing? 16:45:55 thats correct 16:45:57 its incredibly fast 16:46:00 * corsairk8 is very tired and is finding it hard to think 16:46:07 no, no, you misunderstood 16:46:14 he was talking about module inter-communications 16:46:28 wtf would modules communicate 16:46:48 well, almost every module would communicate with the kvm module (the one that implements virtual memory, and process handling) 16:46:54 if it needed to say, allocate memory 16:46:59 or map something 16:47:18 or it may want to communicate with the portio module 16:47:20 or dmaio module 16:47:37 all these modules are basically there to provide an architecture-independant way of talking to hardware 16:47:46 which modules can be written on top of, to make use of their interfaces 16:47:57 and if you want to port it, its simply a matter of replacing those low-level modules 16:48:02 so the user apps uses an intgate (48+7) to call the kernel, the kernel wastes some cycles doing housework and makes a dynamic/static call to the module (2/1+2) 16:48:03 and the higher-level ones will understand everything 16:48:22 pretty much air 16:48:44 ok 16:49:10 are call gates faster air? 16:49:17 brix uses a direct (1+2) call from user app in ring0 to driver in ring0 16:49:26 lol 16:49:29 :) 16:49:33 :) 16:49:40 im constantly seeking new ways to improve things 16:50:03 callgates are faster than intgate but the overhead is probably not worth it 16:50:12 ah 16:50:23 but u could setup a callgate per module 16:50:46 i might for fun, write a libc/kernel module implementing sysexit/sysenter for even faster switching 16:50:51 (under 30 cycles) 16:50:59 the app would call the callgate passing it the function ID, the module would then lookup the ID and call the appropriate function 16:51:09 would be a bit faster than going thru the kernel 16:51:30 heh, only thing is nothing stopping the application crashign system or doing anything it wanted 16:51:53 probably is that u will need to create a callgate for each module and u will need to link the app with it when it loads 16:52:05 uhh 16:52:12 how can the app crash the system? 16:52:19 air: why? 16:52:34 air: i dont think so, every module stays in same 32-bit linear address in same ring 16:52:38 the callgate is just like an intgate 16:52:46 air: i donno, by executing lidt %0 16:53:00 or by disengaging protected mode flag from cr0 16:53:08 or from sending the ide controller into a frenzy 16:53:19 and writing over everything on disk 16:53:19 u wanna tell me how the app would do that? 16:53:28 think about it air 16:53:36 using machine language 16:53:38 there is nothing to think about 16:53:47 ring3 cant do that stuff 16:53:52 hehe 16:53:56 your running it in ring0 16:54:03 no yer not 16:54:11 therefor, if you have the instructions "lidt 0" why would it not execute that? 16:54:14 u dont understand something here 16:54:21 go ahead, explani 16:54:37 i dont know what to explain, yer the one thats lost 16:54:41 lol 16:54:43 okay 16:54:56 air, will you have a c compiler ported to your os? 16:55:02 the app is running in ring3, how is it u think it gets into ring0 16:55:14 air: you just said apps and kernel run in ring 0 both 16:55:23 in brix they do 16:55:24 air: and that if you want a driver call, you dont have to use a call back 16:55:28 call gate 16:55:32 oh, were talking about brix here :) 16:55:35 i am at least lol 16:55:37 ohhh 16:55:41 anyway 16:55:45 safe language 16:56:01 air: if you are using brix, what is to stop someone from messing with the io ports, screwing up memory, setting registers to bad values? 16:56:07 safe language 16:56:14 crush 16:56:15 ah, thats what you would think 16:56:21 but thats not the case 16:56:29 will you allow people to edit binary files in this os? 16:56:35 and code is separated into three levels: user, library and system 16:56:43 even user code? 16:56:49 will that be allowed to be edited while on disk? 16:56:56 did u not read what i said before? crush is everything 16:57:04 it is the one in charge 16:57:05 oh its interpreted? 16:57:08 no 16:57:22 go read the about page 16:57:33 i worked long and hard to describe it as clearly as i could 16:57:33 then whats to stop someone writing an app, and then using another program, say a hex editor to add bad operations to it? 16:57:46 im not gonna repeat it here cuz its really long :) 16:57:52 aww 16:58:01 * corsairk8 hates when people say "go read this" :( 16:58:01 http://brix-os.sourceforge.net/?p0=info 16:58:44 u can probably skip to the section labelled "crush" 16:58:57 on that page, dont click the crush link 17:00:04 --- join: trans (~trans@a2a02274.intergate.bconnected.net) joined #osdev 17:01:16 did ya read it? 17:01:44 yeh 17:01:55 did a little light turn on? 17:01:56 so your saying, the kernel will only run files created by crush? 17:02:03 exactly 17:02:12 but there is no kernel 17:02:30 air: how do you distinguish between code that needs privileged instructions and just any other code? because even if everything's written in crush, certain stuff like drivers will need to do direct hardware i/o 17:02:47 good question ;) 17:02:50 and code is separated into three levels: user, library and system 17:02:55 :) 17:03:09 so system-level crush-compiled code has looser restrictions? 17:03:24 if function uses asm it will be tagged as system 17:03:34 how will your system-level or library-level program know what apps are safe to be run? (ie, built with crush) 17:03:51 if it uses objects such as io it will be tagged as system 17:04:05 what about directly altering memory? 17:04:10 u cant 17:04:12 creating pointers, etc? 17:04:18 u can grab a mem object 17:04:20 not even in the VM implementation? 17:04:31 u cant create pointers 17:04:45 how do you allocate memory then? 17:04:45 crush has a pointer object but u can only load them 17:04:56 u create object 17:04:58 I'm talking system-level, not app-level 17:05:10 (new :myobject) 17:05:31 and how is that implemented / compiled without direct memory access/allocation? 17:05:39 there is no system/app levels 17:06:08 there are some functions that allocate memory chunks but u cant directly call em 17:06:19 right.. 17:06:20 not even system 17:06:27 but are those functions written in crush too? 17:06:30 crush will insert the calls for u 17:06:38 brb, need food 17:06:49 heh 17:09:09 air: will you write your kernel in crush? 17:11:03 --- join: knyx (dutkiewicz@181.portland-02rh15rt.or.dial-access.att.net) joined #osdev 17:17:33 --- join: nbsp (g@ip68-14-60-7.no.no.cox.net) joined #osdev 17:17:54 night fellow developers 17:22:37 night 17:23:49 --- quit: caereth ("BitchX-1.0c18 -- just do it.") 17:27:07 yes 17:27:09 --- quit: nbsp (Read error: 104 (Connection reset by peer)) 17:27:22 how will your kernel access the hardware? 17:27:42 with asm 17:28:03 how will you ensure a program is really compiled with crush? 17:28:42 its not too difficult considering it MUST BE COMPILED WITH CRUSH TO GET INTO THE DICTIONARY 17:28:56 :) 17:30:47 oh :) 17:31:06 crush is not just a language 17:31:14 if u had read the page u would know that 17:32:03 it is the language, it is the package manager, it is the installer, etc.. 17:34:51 will it do my laundry? 17:37:53 once the companies start using it to run washing machines :) 17:45:11 ecause gcc is stupid 17:54:17 hehe 17:56:44 --- quit: corsairk8 ("E = mc^2") 18:00:02 --- quit: I440r ("Reality Strikes Again") 18:17:12 --- quit: witten_ ("Hey! Where'd my controlling terminal go?") 18:17:13 --- quit: zooy0rk (Read error: 104 (Connection reset by peer)) 18:32:54 --- quit: Zzzzlowcoder (carter.openprojects.net irc.openprojects.net) 18:32:54 --- quit: jewel (carter.openprojects.net irc.openprojects.net) 18:32:54 --- quit: trans (carter.openprojects.net irc.openprojects.net) 18:32:54 --- quit: gab (carter.openprojects.net irc.openprojects.net) 18:32:56 --- quit: knyx (carter.openprojects.net irc.openprojects.net) 18:32:56 --- quit: Rico (carter.openprojects.net irc.openprojects.net) 18:32:56 --- quit: witten (carter.openprojects.net irc.openprojects.net) 18:32:56 --- quit: nothing (carter.openprojects.net irc.openprojects.net) 18:33:34 --- join: jewel (~jleuner@spamisevil.test.ie.vianw.net) joined #osdev 18:33:34 --- join: Zzzzlowcoder (~jaja@7n0szc1.cm.chello.no) joined #osdev 18:36:14 --- quit: Zzzzlowcoder (carter.openprojects.net irc.openprojects.net) 18:38:10 --- quit: jewel (carter.openprojects.net irc.openprojects.net) 18:43:55 --- join: Zzzzlowcoder (~jaja@7n0szc1.cm.chello.no) joined #osdev 18:46:09 --- join: gab (~prfalken@gaia.chx-labs.org) joined #osdev 18:48:02 --- join: jewel (~jleuner@spamisevil.test.ie.vianw.net) joined #osdev 18:51:23 --- join: knyx (dutkiewicz@181.portland-02rh15rt.or.dial-access.att.net) joined #osdev 18:51:23 --- join: Rico (Rico@node-c-1c6a.a2000.nl) joined #osdev 18:51:23 --- join: witten (~witten@adsl-gte-la-216-86-210-121.mminternet.com) joined #osdev 18:51:23 --- join: nothing (~nothing@pcp01518417pcs.reding01.pa.comcast.net) joined #osdev 19:39:49 --- quit: knyx (Read error: 113 (No route to host)) 19:52:04 --- join: trans (~trans@a2a02274.intergate.bconnected.net) joined #osdev 20:18:04 --- join: eks (~eks@h24-82-199-179.wp.shawcable.net) joined #osdev 20:47:48 --- quit: trans (Read error: 110 (Connection timed out)) 21:01:26 desiging brix with files instead of persistent objects is SOOOOOOO much easier 21:02:51 but is it a better design? ;) 21:03:05 well 21:03:35 i think so 21:03:55 the programmer has to do more work cuz the objects are now just untyped streams of bytes 21:04:34 but its probably faster this way cuz the programmer can choose how to handle the stream based on the situation 21:05:03 with persistent objects u must choose how to handle it when designing the type 21:06:19 so... basically.. you are going back to what all other systems are using... 21:06:38 kinda 21:07:56 files will still be handled with references, not filenames 21:08:11 air: ever studied AFS? 21:08:26 dont think so 21:08:34 their are some interesting concepts in there 21:08:43 and the fs is now open specs 21:08:48 http://openafs.org/ 21:10:55 am i blind or are there no specs there? 21:11:11 you are probably blind 21:11:18 hehe 21:11:30 there are other sites also, look at my bookmarks at http://onee.yi.org 21:11:41 under Filesystem->AFS 21:12:23 wtf 21:12:42 yer page was default colors last time i went there 21:13:06 when was that, yesterday, the day before? 21:15:09 ehehe 21:15:20 sorry, I was bored of white/black 21:15:32 and the new one is better documented, just not fully complete yet 21:15:47 ohh afs == andrew fs, i know of this 21:15:48 you don't like it? 21:17:02 yer page? i like it very much, any page with a black bg rates very high on my list :) 21:18:55 :) 21:19:07 it's not black actually, it's #232323 ;) 21:19:15 close enuf 21:19:19 yeah 21:20:09 what is that bug from? 21:20:10 my old bookmark page was just a bunch of links classified under sections, this new bookmark page actually got a list of main subjects on each site 21:20:30 air: some 3D background available on some website.. 21:20:36 it's not a movie AFAIK 21:20:51 you want the original picture I used? 21:21:08 no 21:21:14 ;) 21:22:49 u should make the entire line a link 21:23:22 instead of "aria, a free..." 21:23:37 hrm.. 21:23:42 for the look or? 21:24:07 well, u use same color for text and links 21:24:20 so i have to hunt around until cursor changes 21:24:28 hrm.. #909090 and #A0a0a0 ;) 21:24:38 you don't have links underlined? 21:24:52 no 21:24:57 huh.... 21:25:32 I'll do that tomorrow then. 21:25:45 I don't feel like working on the bookmarks today :p 21:26:24 is that a file or database? 21:26:56 ehhee, just a hand-made file 21:27:02 yuck 21:27:03 I'm not a big database fan 21:27:16 i have learned my lesson with files 21:27:31 I just never took the time to learn their syntax, and I'm too anti-GUI to use a pre-made tool ;) 21:27:44 now i let php do all the work for me 21:28:11 ehehe, I just open up ViM and let my fingers do all the work for me ;) 21:28:12 well, it dont need to be a db like sql, u can make yer own flat file db 21:28:23 qzx.com/lib uses a flat file db 21:29:05 my previous site used to run on a perl backend 21:29:09 the php just parses the file into an array and then i can use a form to add/remove entries and output the array back to the file 21:29:12 the bookmark was on a flat file db 21:29:25 but I just don't feel like recompiling apache with perl 21:29:35 dont 21:29:42 use cgi 21:29:49 bah, cgi is slow 21:30:09 bah, does yer site get a million hits a day? 21:30:20 who knows ;) 21:31:00 qzx.com gets over 1300 (not counting images) hits per day and its all cgi 21:31:23 on a slow celeron 450 which is also my main workstation 21:33:05 I'm just trying to find reasons not to work on a better system ;) 21:33:15 hehe 21:33:48 air: ever went to http://ibm.com/linux/ ? 21:33:57 u should submit all these links to qzx.com/lib :) 21:34:01 air: you know that if you write an article and it gets accepted, they give you 1000$ US :p 21:34:16 air: nah, you should download my bookmark and import it ;) 21:34:18 i cant write 21:34:58 i said "u" because i dont wanna do any work :) 21:35:10 and you think I want? ;) 21:35:16 hehe 21:35:35 u had the time to write this thing by hand 21:35:41 I'm already working at making this bookmark, I won't on top of that go around and submit all the links individually again! 21:35:57 the only extra thing I have to write is
  • ;) 21:36:07 everything else would have to be done anyway in a flat db 21:36:16 what about ? 21:36:17 the url and the text are what makes most of the page 21:36:22 all copy/pasted 21:36:27 I just have to fill the blanks :P 21:36:38 in fact
  • too is pasted :p 21:36:50 and why do u use ???? 21:36:52 so I really just fill in the blanks 21:37:01 it makes the little "o" at the start of the line 21:37:05 makes it nicer 21:37:15
  • does that,
  • is not required 21:38:02 is not required, but I like clean syntax ;) 21:38:03 it wastes space just like

    21:38:07 ehehe 21:38:27 and :) 21:38:28 I need some bad habits you know.. I don't smoke, I don't drink, I don't do drugs.. 21:38:40 but I close my
  • tags :p 21:38:55 hehe 21:40:57 alright, I go to bed, gn 21:42:09 night 21:44:10 * eks wonders if air will ever bring BRiX to a user useable level... 21:44:14 --- nick: eks -> eks[Zzzzz] 21:57:53 --- join: trans (~trans@a2a02274.intergate.bconnected.net) joined #osdev 22:17:09 --- join: malenfant (malenfant@bc-vic-a53-02-70.look.ca) joined #osdev 22:18:16 --- join: Chille (~c@h45n2fls32o898.telia.com) joined #osdev 22:27:04 --- quit: Chille () 22:35:42 --- quit: trans (Read error: 110 (Connection timed out)) 23:58:29 --- join: trans (~trans@a2a02274.intergate.bconnected.net) joined #osdev 23:59:59 --- log: ended osdev/02.04.02