From owner-freebsd-current Fri Dec 21 16:20:13 2001 Delivered-To: freebsd-current@freebsd.org Received: from rwcrmhc52.attbi.com (rwcrmhc52.attbi.com [216.148.227.88]) by hub.freebsd.org (Postfix) with ESMTP id 60F6E37B416 for ; Fri, 21 Dec 2001 16:20:08 -0800 (PST) Received: from InterJet.elischer.org ([12.232.206.8]) by rwcrmhc52.attbi.com (InterMail vM.4.01.03.27 201-229-121-127-20010626) with ESMTP id <20011222002008.SJHP6450.rwcrmhc52.attbi.com@InterJet.elischer.org> for ; Sat, 22 Dec 2001 00:20:08 +0000 Received: from localhost (localhost.elischer.org [127.0.0.1]) by InterJet.elischer.org (8.9.1a/8.9.1) with ESMTP id QAA59509 for ; Fri, 21 Dec 2001 16:15:07 -0800 (PST) Date: Fri, 21 Dec 2001 16:15:06 -0800 (PST) From: Julian Elischer To: current@freebsd.org Subject: KSE changes available Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG The latest round of KSE changes are available from http://www.freebsd.org/~julian/thediff These changes represent a work in progress. Basically the state is: GENERIC compiles (I don't know yet if it runs but I doubt it.) The following changes have been made: The 'thread' structure is no longer a built-in part of the proc structure. There is an infrastructure to independently crfeate and reap threads. The infrastructure is used to create and destroy the 'usual' single thread associated with each process. It should eventually be used to create more threads per process.. The 'state' variable associated with the process has been raped and now each thread, and process and KSE has it's own state. This last part is the bit that is broken because a LOT of the kernel doesn't expect the state of a thread to be spread across several structures. For example: switch (p->p_stat) { case SRUN: ... case SSTOP: .. has to be completely rewritten because SRUN is a per-thread property and is accessed as: FOREACH_THREAD_IN_PROC(p, td) { switch(td->td_state) { case TDS_RUNNING: case TDS_RUNQ: case TDS_SLP: ... } ... } wheras STOP is still a per-process state. obviously any code that tries to assume the same scope for these tow states will break violently in the new code. I have replaced some of the logic where there seems to be a simple answer, but there are plenty of places where the answer is not clear. Such places include signal delivery, selection of process (thread?) to deliver a signal to, collection of scheduling statistics, handling FORK run by one of several threads, handling EXIT run by one of several threads, handling when the user types ^Z and suspends the process. If anyone is feeling adventurous they can stat with the code that is there and start fixing things :-) send me patches but let me know ahead of time what you will be doing so we don't duplicate, and so I can send you notes on where I'm going in that part.. I'll be working on the scheduler for the next few days I think. Note: if ((p->p_flag & P_KSES) == 0) a process should act exactly as it does now.. :-) REGARDS JULIAN (bloody capslock key) To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message