As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I Googled a lot about L4 microkernel and found that very less resources are there on L4.
What are some good links I can refer ?
Is there any application of L4 (i.e. where it is used) ?
L4 supposedly passed one billion installs a year ago, so, the short answer is yes. According to my reading, Linux running on top of L4 is factors faster than running alone, making for a Linux L4, and Android has been ported to L4 on top of linux. My view, is if so many installs are running, why can't we have L4 available to us through a shell, such ksh or bash? The short answer is drivers; it was chosen for us by the L4 gods that L4 should be Linux to support drivers, even though Linux is short on drivers. There is a little about it here on this community wiki: http://alopex.li/wiki/L4FiascoTutorial
And the rationale for L4/Linux here: http://www.slideshare.net/sartakov/03-advanced-components
If drivers are so problematic, such that free software prevents commercial vendors from writing them, then why not create a "qt" version for driver writers, that is to say a public domain kit that unifies computer functionality to define drivers. Then OS writers would create the backend for their OS such that the vendor only has to do the work once.
The other useful topic is the idea of a VM over L4, using Perl Parrot VM (PVM) as a hypothetical example; if L4 could be modified to run strictly in registers.... imagine the performance
L4 is a family of microkernels sharing a more or less common API and some base ideas/concepts.
Typical applications are hard-realtime/high availability scenarios as well as a
usage as hypervisor hosting more traditional operating systems.
About applications:
There is an L4 kernel from ok-labs.com which was for example used in the Motorola Evoke
to run the application stack side by side with the baseband stack on the same processor.
A kernel from ok-labs is also used to host the baseband-stack of the iPad2.
sysgo.com has a kernel called PikeOS which they use for aerospace/defense applications.
According to Andrew Tanenbaum L4 is used in cell phones (fifth from last answer, or you can do a text search for "L4"). Unfortunately, I haven't managed to find much other than the L4 website, and FIASCO.
Related
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I have been using MAC OSX and since beginning I have had problems with memory consumption of JAVA ides.. I have tried Netbeans, Eclipse and Intellij, tried to configure jvm settings especially for eclipse but memory problem remains...
basically, although i am not doing any compiling or building, keeping one single project open makes my ide to consume more than 750 mb of ram.. this is same for all the ides i wrote above and customizations of ini files makes a little impact...
are there any low memory consuming ides around? or something written for mac only so probably it will handle ram issues in a better way?
Smart IDE needs to index all your project and SDK files to provide code completion and other intelligent features. The index needs to be stored somewhere, so there would be always a tradeoff between intelligence, performance and memory consumption.
If IDE chooses to minimize the memory usage, it will have to store cache on disk and load it when you invoke some feature that requires some data from the cache, you'll get a delay when using a feature, which is unacceptable and will slow down editing.
Of course you want your IDE to be fast. To achieve this, it needs to always have most of the caches and indexes already loaded in memory, but you'll see higher memory usage.
Whether you like it or not, but most modern applications prefer to be faster and consume more RAM, rather than to be slow and consume less RAM. Chrome browser with 5 open tabs will consume more memory than your IDE.
Memory is a cheap resource (unless you have old hardware that you can't upgrade by installing more RAM, like a laptop). Normally developers do not save on hardware. In order to be productive when using IDEs they have systems with at least 8GB of RAM. Developers working with Java and application servers can have even more. The price of 24GB is ~$100-150 now.
Would you save on RAM and then look for a slow or feature limited IDE that can work on your system? Or would you buy better hardware and forget about this resource for several years while enjoying the IDE providing more features and speed?
You may be better off with a text editor like http://www.sublimetext.com/
Or if you want to be old school, vi or emacs.
You can reduce Eclipse's memory usage if you tweak settings and remove things you don't need. In particular, don't run the EE version, disable spell checking, and keep your project workspace tidy (1 project).
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I am compiling various lists of competencies that self taught programmers must have.
Among all subjects, Operating Systems is the trickiest one, because creating even a toy operating system is a rather non-trivial task. However, at the same time an application developer (who may not have formally learned CS) must at least be aware of and hopefully should have implemented some key concepts to appreciate how an OS works, and to be a better developer.
I have a few specific questions:
What key concepts of operating systems are important for a self taught programmer to understand so they can be better software developers (albeit working on regular application development)?
Is it even remotely possible to learn such a subject in byte sized practical pieces ? (Even a subject like compiler construction can be learned in a hands on way, at a rather low level of complexity)
I would suggest reading Andrew S. Tanenbaum ( http://en.wikipedia.org/wiki/Andrew_S._Tanenbaum ) book on Modern Operating Systems (ISBN 978-0-13-600663-3) as everything is there.
However from the book index we can identify the minimum key topics:
Processes
Memory management
File systems
Input/output
And the easiest way to start playing with this topics will be to download MINIX:
http://www.minix3.org/
and study the code. Older versions of this operating system might be easier to understand.
Another useful resource is Mike Saunders How to write a simple operating system that shows you how to write and build your first operating system in x86 assembly language:
http://mikeos.sourceforge.net/write-your-own-os.html
Every OS designer must understand the concepts behind Multics. One of the most brilliant ideas is the notion of of a vast virtual memory partioned into directly readable and writable segments with full protections, and multiprocessor support to boot; with 64 bit pointers, we have enough bits to address everything on the planet directly. These ideas are from the 1960s yet timeless IMHO.
The apparent loss of such knowledge got us "Eunuchs" now instantiated as Unix then Linux and an equally poor design from Microsoft, both of which organize the world as a flat process space and files. Those who don't know history are doomed to doing something dumber.
Do anything you can to get a copy of Organick's book on Multics, and read it, cover to cover. (Elliott I. Organick, The Multics System: An Examination of Its Structure).
The wikipedia site has some good information; Corbato's papers are great.
I believe it depends on the type of application you are developing and the OS platform you are developing for. For example if you are developing a website you don't need to know too much about the OS. In this example you need to know more about your webserver. There are different things you need to know when you are working on Windows, Linux or Android or some embedded system or sometimes you need to know nothing beyond what your API provides. In general it is always good for a developer or CS person to know following.
What lies in the responsibility of application, toolchain and then OS.
Inter process communication and different IPC mechanism the OS system calls provides.
OS is quite an interesting subject but mostly consist of theory but this theory comes to action when you working on embedded systems. On average for desktop applications you don't see where all that theory fits in.
Ok, operating system concepts that a good programmer should be aware of.
practically speaking. Unless you are concerned about performance. If you are writing in a cross os language. None.
If you care about performance.
The cost of user/system transitions
How the os handles locking/threads/deadlocks and how to best use them.
Virtual Memory/Paging/thrashing and the cost thereof.
Memory allocation, how the os does it, and how you should take advantage of that to when A, use the OS allocator ( see 1) and when to allocate from the os and sub allocate.
As earlier put, process creation/ and inter process communication.
How the os writes/reads to disk by default to read/write optimally ( see why databases use B-trees)
Bonus, sub-os, what cache size and cache lines can mean to you in terms of performance.
but generally it would boil down to what does the OS provide you that isn't generic, and what and why does it cost, and what will cost too much ( too much cpu, too much disk usage, too much io, too much network ect).
Well that depends on the need of the developer like:-
Point.
Applications such as web browsers and email tools are
performing an increasingly important role inmodern desktop computer
systems. To fulfill this role, they should be incorporated as part of the
operating system. By doing so, they can provide better performance
and better integration with the rest of the system. In addition, these
important applications can have the same look-and-feel as the operating
system software.
Counterpoint.
The fundamental role of the operating system is to manage
system resources such as the CPU, memory, I/O devices, etc. In addition,
it’s role is to run software applications such as web browsers and
email applications. By incorporating such applications into the operating
system, we burden the operating system with additional functionality.
Such a burdenmay result in the operating system performing a less-thansatisfactory
job at managing system resources. In addition, we increase
the size of the operating system thereby increasing the likelihood of
system crashes and security violations.
Also there are many other important points which one must understand to get a better grip of Operating System like Multithreading, Multitasking, Virtual Memory, Demand Paging, Memory Management, Processor Management, and more.
I would start with What Every Programmer Should Know About Memory. (Not completely OS, but all of it is useful information. And chapter 4 covers virtual memory, which is the first thing that came to mind reading your question.)
To learn the rest piecemeal, pick any system call and learn exactly what it does. This will often mean learning about the kernel objects it manipulates.
Of course, the details will differ from OS to OS... But so does the answer to your question.
Simply put:
Threads and Processes.
Kernel space/threads vs user space/threads (probably some kernel level programming)
Followed by the very fundamental concepts of process deadlocks.
And thereafter monitors vs semaphores vs mutex
How Memory works and talks to process and devices.
Every self-taught programmer and computer scientist alike should know the OSI model and know it well. It helps to identify where a problem could lie and who to contact if there are problems. The scope is defined here and many issues could be filtered out here.
This is because there is just too much in an operating system to simply learn it all. As a web developer I usually work in the application level when an issue ever goes out of this scope I know when i need help. Also many people simply do not care about certain components they want to create thing as quickly as possible. The OSI model is a place where someone can find their computer hot spot.
http://en.wikipedia.org/wiki/OSI_model
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
What are some GUIs to use with Mongo, and what features do they offer? I'm looking for facts here, not opinions on which interface is best.
Official List from MongoDB
http://www.mongodb.org/display/DOCS/Admin+UIs
Web Based
For PHP, I'd recommend Rock Mongo. Solid, lots of great features, easy setup.
http://rockmongo.com/
If you don't want to install anything ... you can use MongoHQ's web interface (even if you your MongoDB isn't on MongoHQ.)
https://mongohq.com/home
Mac OS X
While MongoHub had been a decent option for a while it's bugs make it virtually unusable at this point ...
There is a more up-to-date (and less buggy) fork of the MongoHub project available: https://github.com/fotonauts/MongoHub-Mac you can download a binary here.
Windows
By far, the best UI (for Windows) currently out there is MongoVUE.
http://blog.mongovue.com/
WARNING/UPDATE: MongoVUE seems to be abandoned.
Looks great, lots of features, and if you are new it will really help you get going ...
http://blog.mongovue.com/features/
Here's a Q&A with the author too if you are interested ...
http://learnmongo.com/posts/qa-ishann-kumar-creator-of-mongovue/
On Mac there is MongoHub. On Windows you could try MongoVUE.
Also see Do any visual tools exist for MongoDB (for Windows)?
Screenshot of MongoHub:
Here's the official page of Admin UIs.
I have not really used any of them. But it looks like there is quite a bit of coverage there.
Web
At the shop where I work we use the Prudence platform for some stuff, and also MongoDB, so we of course use MongoVision a lot. Browser based, tabbed collection views, pretty-printed document editor, and three themes OOB. Open source.
(source: threecrickets.com)
http://code.google.com/p/mongo-vision/
OS X
Being on a Mac, I wish MongoHub was as reliable as MongoVision. It probably will be soon though, since the project has been quite active on Github as of late.
(source: skitch.com)
http://mongohub.todayclose.com/
try Mongo Explorer. you'll like it!
try mongoVue i'm using it and i think it's good enough
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
Is LISP or something like Jess the best choice? I'm interested in writing a program that makes a suggestion based on users' answers. Computational considerations are not really a factor this is pretty much a pattern matching engine. Also I would like to make an app for this and put it up on the web.
UPDATE: I would like to put this up on a blog or website and let people use it from there. I guess my question then is there a particular inference engine that works with the .NET family, or PHP, or something to that effect? What are some of the pros and cons of each options etc.
Step 1. Pick an inference engine. There are many choices. Here's a list: http://en.wikipedia.org/wiki/Expert_system#Shells_or_Inference_Engine
Step 2. Use the language that interfaces with the inference engine.
You'll be much happier leveraging an inference engine for expert systems work.
I would like to put this up on a blog or website and let people use it from there
Trivial.
is there a particular inference engine that works with the .NET family, or PHP, or something to that effect?
Doesn't matter.
Here's the confusion. Your "web site" and your "inference application" have NOTHING to do with each other. Nothing.
Your web site can be done in any tool set you can find. It doesn't matter.
Your inference application can be done in any tool set you can find. It doesn't matter.
Your web site will invoke the inference application through any API that makes sense. The lowest common denominator in API's (the reason that none of these choices matter) is to do this.
Write your inference application as a stand-alone command line tool.
Write your web application to run the stand-alone tool, collect the output and turn the output into an HTML page.
Note that this multi-porocess implementation may be faster and make better use of multi-core processors. It forces the OS to manage the web server (Apache HTTPD, for example), the web application and the expert system as potentially three, separate, parallel processes.
You can also take a look at Prolog. SWI-Prolog (http://www.swi-prolog.org) is very complete and has an HTTP support library included (http://www.swi-prolog.org/pldoc/package/http.html). This paper might be helpful in using SWI-Prolog on the web ("SWI-Prolog and the web" http://dare.uva.nl/record/285350)
And, you can find a tutorial on building expert systems with prolog at: http://www.amzi.com/ExpertSystemsInProlog/
You will hear a lot of subjective opinions here, since few people have experience in more than one language writing expert systems.
I can recommend Common Lisp, as there is quite some literature and existing code available in this language, and it is a very powerful language and not too difficult to learn (read "Practical Common Lisp" by Peter Seibel). Of course, any new high level language requires some effort to learn. For the web application, you can use, e.g., Hunchentoot and CL-WHO, and there are a lot of database bindings (I like Postmodern and CL-SQLite).
I would suggest CLIPS and its .net port clipsnet
http://sourceforge.net/projects/clipsnet/
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
What's the best operating system to study in order to write your own x86 operating system from scratch?
I think Minix was created for pretty much that exact purpose.
Have fun!
It might be difficult to comprehend the source for an entire OS all at once. The tutorials over at osdev.org have a few "bare bones" code samples to get you started.
I just wrote my version of x86 kernel from scratch! (for my OS class project) and that was experience I couldn't probably describe. You can find valuable resources at above link.
For my OS class in college we used the Nachos OS Project and implemented that. I did the C++ version, however I think there is also a Java port of this as well. I remember it being very interesting and learning a great deal, even though it was a lot of work.
It all depends on how you want your Operating System to function, if you want a microkernel you should probably study Minix 3, or if you want a monolithic kernel the current linux kernel is a good place to start from (HINT: look in arch/x86/boot, there is some very interesting code in there).
However I personally think that you should read through the Intel and AMD manuals, and then do a bit of reading on the osdev.org forums and wiki. They have plenty of code to study, and are generally helpful towards newbies.
Honestly, you should probably not start with an x86 architecture, or even operating systems but maybe something like an 8-bit starter kit, like a basic Fox11 development kit. In college, I wrote my first (and only) OS in Assembly for an M68HC11 processor (the one in the kit).
If you really want to build your own OS from scratch, you've got a long road ahead of you.
I think best way to read many different operating system sources, definitely osdev barebone tutorials, whitepapers on OS research and documentation on your target hardware.
I personally would recommend looking at l4-ka pistachio kernel, written in pretty darn good C++. There are also multiple smaller projects definitely worth checking out, like jimix or pedigree.
Best to stick around osdev forums and wiki - there is a lot of information there already answered - see http://forum.osdev.org and http://wiki.osdev.org
I read this article a while back. You might find it interesting. This guy wrote MINIX back in the day for the very purpose of teaching OS concepts. So it would probably be a good simple OS to study. http://www.cs.vu.nl/~ast/brown/
However, as Martin and Cory mentioned, it's a big chunk to chew.
There is not much point in studying obsolete OS's which is pretty much all current OS's as they tend to have long lives. Have a look at some fresh ideas (although based on tried and true) like Singularity