That small set of calls is all you need for a circular buffer that works "automatically" - meaning that you never need to check where you are in the buffer, because the memory is mapped twice, so reading off the end of the buffer just reads the beginning of the buffer.
-
-
This is all stuff that the CPU does automatically for you, but which people don't realize you can do because of libraries like the CRT which were written for the lowest common denominator (eg., chips with no MMU).
1 reply 0 retweets 12 likes -
Replying to @cmuratori @JustSlavic
Well, holy shit. This is quite the revelation.
1 reply 0 retweets 6 likes -
Replying to @beast_pixels @JustSlavic
Now I am wondering what people thought malloc was doing :) If you didn't know it called the OS to change the virtual memory mapping for your process, what _did_ you think it was doing?
3 replies 0 retweets 6 likes -
What about file operations on linux/mac? Are there OS provided functions that are lower level than the C runtime?
1 reply 0 retweets 0 likes -
Yes, of course. I don't do much MacOS work so I don't know what their architecture looks like, but on Linux it is the syscall table. You can see the entire thing here: https://filippo.io/linux-syscall-table/ …
1 reply 0 retweets 4 likes -
Replying to @cmuratori @wisam910 and
So like, this is what the CRT is doing. When you call "write" in libc you're not actually calling the OS, you're just calling the library, and then the library eventually does a syscall with a 1 in the RAX register to _actually_ transition to the operating system's "write".
1 reply 0 retweets 2 likes -
Replying to @cmuratori @wisam910 and
If you want, you can just make your own syscall to the OS and bypass the CRT entirely, and still call "write". That will bypass the CRT's middleman code, and ask the kernel to do the write directly.
1 reply 0 retweets 2 likes -
This would never have occurred to me in the past. I used to think CRT is the only officially supported way of talking to the kernel. I think this is the macos (darwin) system calls tablehttps://github.com/apple/darwin-xnu/blob/main/bsd/kern/syscalls.master …
3 replies 0 retweets 0 likes -
Replying to @wisam910 @cmuratori and
There are entries there for creating and destroying threads bsdthread_create bsdthread_terminate I used to think the POSIX pthread is the only api for managing threads! Apparently that too is a "high level" abstraction on top of the actual operating system threading system.
1 reply 0 retweets 0 likes
Yes, definitely. Threads and processes are all first-class OS concepts.
Loading seems to be taking a while.
Twitter may be over capacity or experiencing a momentary hiccup. Try again or visit Twitter Status for more information.