h a l f b a k e r yWe got your practicality ... right here.
add, search, annotate, link, view, overview, recent, by name, random
news, help, about, links, report a problem
browse anonymously,
or get an account
and write.
register,
|
|
|
Please log in.
Before you can vote, you need to register.
Please log in or create an account.
|
yours | mine
What's yours is yours. What's mine is mine. A computer design philosophy. | |
My computer's really fast. At least that's what it says on the box. Sometimes it doesn't seem so, because what's taking up the processor cycles isn't something that I regard as important at the moment.
Now, how do I stop my computer from doing this thing that it seems to find important right now.
Well I don't. I don't want to. What I want to do is make sure that the computer doesn't spend *all* its time doing it. What I do is reserve a percentage of the processor cycles and memory space. I call them 'mine'. Now, the computer is doing important things, too, without which things will grind to a halt and I won't be able to work, so it can have some reserved time, too. I'll call that 'yours' since I'm talking to my computer. Just to make sure that we do something useful together, we'll reserve some time for applications, too. For want of a better word we'll call that 'ours'. Add these together and that should leave a quantity spare that can be allocated to whichever of these three categories shouts the loudest.
Now, the 'mine' programs would consist of things like running the windowing system, making sure that I can type in text boxes on the screen, and generally interract with the system. The 'yours' programs would handle networking, file management, and generally making sure that the box stays alive. The 'ours' space would consist of the applications.
Just to make sure that the front end of my system doesn't freeze when it asks a difficult question of the back end, (almost) all communication beween these categories of process would have to asynchronous. This means that a process that is 'mine' can ask any question it likes of a process that is 'yours' but it isn't allowed to hang around for an answer. If it asks if a particular network share still exists (because it wants to display it in a file browser), the windowing system would have to be able to be able to cope with the state 'this question has no answer yet' and display this appropriately. It might grey out the drive or put a question mark on it, but it's not allowed to slow or halt the interface while it waits for the answer.
To reinforce the division between 'mine' and 'yours' and to communicate more effecively what you actually want to look at, you could divide the desktop into 'yours' and 'mine'. Since the desktop is mine anyway, I'll take 90% of it. The computer can have an area on the taskbar or a small window that I can resize.
If there's warning, or a network operation times out, the computer cannot display a pop-up box, cannot take mouse control away from me, cannot change the keyboard focus. All it can do is put an icon into it's desktop space. It is my choice when I look at it.
Similarly, when I launch a program, it can only use the 'ours' space. It can display an icon saying how much of the program is loaded into memory, but cannot display a splash screen or non-working partially loaded app until I drag the program out of the 'our' box and onto the desktop that I consider 'mine' to start working with it.
Ceci n'est pas une diatribe.
[link]
|
|
I realize what you are proposing is more distinct but on XP there is a global CPU priority setting that allows the user to designate whether the CPU time is devoted to background or foreground application tasks. Never touched it, myself, so I don't know how granular it is. If I remember right there is something like this in UNIX as well. |
|
|
Not bad. (+) How about three distinct processors to handle this melange? |
|
|
bris: This could work along side all sorts of prioritisation. With reservation, neither foreground nor background processes could be marginalised by a process of another type. |
|
|
Madcat: That's how the idea came about. A coworker has a twin processor machine that was being a little unresponsive. I wondered if you could set it up so that one processor ran the front end and the idea popped into my head. |
|
|
don't forget us when you're rich and famous (+) |
|
|
I really hope I'm not the only one to have understood [Rods Tiger]'s joke. It would be a sad indictment of my life. |
|
|
Awww, youre just toyin with us. |
|
|
Hmm. Surely this is Baked in the mainframe world where timeslicing runs at the OS level. |
|
|
I appreciate the issue, but I doubt you'll see this any time soon. I'm afraid Grandma and Grandpa just wouldn't get it. |
|
|
It is baked phoenix. In VMS you can do this from the command line. |
|
|
//you could set it up so that one processor ran the front end//
Yes, you can do this in Windows. A thread or an entire process can be set to have affinity to a particular processor. What you need is a tool that sets all the user processes (things with a UI) to have affinity with one processor, and all the background stuff to the other. |
|
|
The non-Server versions of Windows (Professional and Home, I guess....they keep changing the nomenclature) also give an automatic slicing boost to whichever process has the foreground window right now. |
|
|
So the mechanisms do exist, the problem is that most programs are not properly designed to take advantage of them. Even your asynchronous I/O details (which is very important) is fully supported in Windows, but many programmers just don't bother to use those versions of the APIs. |
|
|
Surely it would be "My" not "Mine" in the Microsoft world. |
|
|
" ... they keep changing the nomenclature ... " They do? |
|
|
Well, it was NT x.x, then Windows 2000, then Windows XP. Within each of those, there was Professional and Server, then it became Professional, Server and Advanced Server, then it became Home, Professional, Server and Advanced Server. The exact list of what was included in each version changed a bit with each name change. |
|
|
But that's been over 8 years time, [krelnik]. And each of those have represented new products and not just arbitrary name changes. |
|
|
[UB] You should look at the PC-DL motherboard Asus has recently released for dual Xeon and using the 875P chipset with dual DDR333 memory. Finally a decent dual P4 motherboard that's designed for a desktop machine and not a server. |
|
|
Hmmm. I don't want to appear like a party pooper but I think that handing over such a degree of control to the user would cause your computer to perform in a horribly inconsistant and unsatisfactory manner. The user generally has no idea which resources an application or the OS is using, (mainly because they are not one of the crazy programming team that coded the application) so blindly throttling a resource that the user just deems irrelevent could grind the poor 'puter to a halt. Writing a better OS is the boring but most appropriate solution. Though as a concept I like it. More rope to the user yes, but not so much so that they hang themselves. |
|
|
nichpo: It's a design philosphy. The user wouldn't control it. |
|
|
phoenix: I can't see how this would apply to a mainframe. What processes would it tag as being relevant to a user sitting at the machine? |
|
|
Shz: I used VMS extensively some years back and, although I was very fond of it and liked the way it handled lots of things, found no evidence that it set aside memory and processor capacity for different classes of processes. Are you sure it was designed with this architecture? |
|
|
The key thing here is that this is not just engine for timeslicing individual processes. It is a layer above that. |
|
|
//Are you sure it was designed with this architecture?// |
|
|
//The key thing here is that this is not just engine for timeslicing individual processes. It is a layer above that.// |
|
|
Layered TSO? I still cant fishbone cause methinks youre not talkin bout midrange/mainframe systems. |
|
|
Well, timeslicing might not be the best term. Nor is processor affinity what I think [st3f] is after. |
|
|
More like the ability to create a sandbox where an application can run, independent of other sandboxes. Correct me if I'm wrong. |
|
|
Crashes affect only the sandbox in which they occur. A given process (even one belonging to the OS) cannot hog all the CPU cycles. |
|
|
This is a mix of good user interface and bad systems ideas. |
|
|
Good user interface idea: have a separate area for system announcements and "interrupts" in which messages get attention, but don't cause the focus to jump away from the user. More systems should use that.
Good user interface idea: don't have the front end freeze up if something in the back-end is slow. For example, don't have applications lock up when the networked file system doesn't immediately respond, or when resolving a DNS name. |
|
|
But actually implementing that (and here we get into the bad systems ideas) takes much more than just priorities or time slices.
Most of the time, what makes an application sluggish is not something unrelated that's going on on the same computer - it's that the application uses a slow service synchronously.
To fix that, the application programmer needs to be aware of things that can take a while, needs to communicate the temporary delay to the user, as you describe, and needs to be able to handle an exponential number of interacting events - and this chaos goes all the way up to the user interface, and breaks with most of the walls programmers are used to building between modules. |
|
|
Unrelatedly, many systems already priorize differently for interactive and non-interactive applications. (Unix, for example.)
And almost all of them allow you to explicitly assing priorities to a process. |
|
| |