This one took a while! Major developments were from the 70s! Perhaps it took the Internet revolution to make its importance clear.
This was the first generation of commercially successful radios.
It uses a crystal detector as its diode, which is a crucial element of the radio, thus its name.
They were superseded by transistor radios, which were much more reliable, portable and could amplify the signal received.
Public facing GitLab instance: gitlab.binets.fr/, e.g. a repo in Ciro's account: gitlab.binets.fr/ciro.duran-santilli/china-dictatorship
It is non-trivial to determine what is the smallest legal ELF file, or the smaller one that will do something trivial in Linux.
Some impressive attempts:
In this example we will consider a saner
hello world
example that will better capture real life cases.The breadboard of photonics!
For example, that is how most modern microscopes are prototyped, see for example Video "Two Photon Microscopy by Nemonic NeuroNex (2019)".
This is kind of why they are also sometimes called "optical breadboarbds", since breadboards are what we use for early prototyping in electronics. Wikipedia however says "optical breadboard" is a simpler and cheaper type of optical table with less/no stabilization.
Ciro Santilli does the same via Google searches and Twitter/Reddit searches for himself, you can't invent anything new nowadays:
Kibo was known for his high-volume but thoughtful posts, but achieved Usenet celebrity circa 1991 by writing a small script to grep his entire Usenet feed for instances of his name, and then answering personally whenever and wherever he was mentioned, giving the illusion that he was personally reading the entire feed.
What if Process 1 tries to access
0x00003000
, which is not present?The hardware notifies the software via a Page Fault Exception.
When an exception happens, the CPU jumps to an address that the OS had previously registered as the fault handler. This is usually done at boot time by the OS.
This could happen for example due to a programming error:but there are cases where it is not a bug, for example in Linux when:
int *is = malloc(1);
is[2] = 1;
- the program wants to increase its stack.It just tries to accesses a certain byte in a given possible range, and if the OS is happy it adds that page to the process address space, otherwise, it sends a signal to the process.
- the page was swapped to disk.The OS will need to do some work behind the processes back to get the page back into RAM.The OS can discover that this is the case based on the contents of the rest of the page table entry, since if the present flag is clear, the other entries of the page table entry are completely left for the OS to to what it wants.On Linux for example, when present = 0:
- if all the fields of the page table entry are 0, invalid address.
- else, the page has been swapped to disk, and the actual values of those fields encode the position of the page on the disk.
In any case, the OS needs to know which address generated the Page Fault to be able to deal with the problem. This is why the nice IA32 developers set the value of
cr2
to that address whenever a Page Fault occurs. The exception handler can then just look into cr2
to get the address.Why are pages 4KiB anyways?
There is a trade-off between memory wasted in:
- page tables
- extra padding memory within pages
This can be seen with the extreme cases:
- if the page size were 1 byte:
- granularity would be great, and the OS would never have to allocate unneeded padding memory
- but the page table would have 2^32 entries, and take up the entire memory!
- if the page size were 4GiB:
- we would need to swap 4GiB to disk every time a new process becomes active
- the page size would be a single entry, so it would take almost no memory at all
x86 designers have found that 4KiB pages are a good middle ground.
Sequence of genes under a single promoter. For an example, see E. Coli K-12 MG1655 operon thrLABC.
A single operon may produce multiple different transcription units depending on certain conditions, see: operon vs transcription unit.
Because a Git commit can have more than 1 parent due to merge commits when you do:
git merge
It can even have more than 2, there's no limit. Although that is not so common (with good reason, 2 is already one too many): softwareengineering.stackexchange.com/questions/314215/can-a-git-commit-have-more-than-2-parents/377903#377903
Unlisted articles are being shown, click here to show only listed articles.