Premiere Technologies 1996-2000 Multi-Threaded Programming on a Single-Threaded Operating System Premiere Technologies originally made its money in the business calling card industry. This was back in the day before cell phones were ubiquitous and pay phones were still heavily used by people on the road, and calling cards were a common way for those people to save money. The company has since changed name to Premiere Global Services. To support the calling card business, a DOS-based telephony system written in C was developed. It used an assembly language routine to enable threading in the application, thereby allowing a single Intel DOS machine to handle as many as 48 inbound and outbound phone lines simultaneously. Dialogic hardware was used to handle from 1 to 4 T1 lines (providing the 48 in and 48 out phone lines), and sometimes conference calling Because the application ran on DOS, I learned a lot about memory constraints. Nowadays, having a program that is 30 megabytes in size is no big deal, but back then, the program had to fit within 640 KB when running. I came face to face with this limitation shortly after I started. My experience up until this point had been programming in a unix environment - where how much memory a program uses doesn't matter much. In unix, memory is laid out like a gigantic field, and your program is given a little patch to operate in. If your program needs more memory, it simply asks the operating system for an addition to its patch, and more is provided. If the operating system ever runs out of actual memory, it has provisions to start using part of the hard drive as extra memory. Of course, the reality was far more complex, but the programmer didn't really need to know about it. As a result, when programming in unix, there are things you don't think about, such as how much memory your string literals take up, or how large your stack grows. I was used to thorough logging in my programs, and so the first task I gave myself was to add what I considered "proper" logging to the system. Well, it wasn't very long before I found out why the logging in the application was so sparse: it wouldn't compile. In the memory model used at Premiere, the maximum amount of space allowable for all string literals was 64 KB - and a lot of that was already filled before I started adding my logs. To get around the fact that logging could not effectively be done, the designers of the application created a scheme whereby as the program pointer entered functions, a numeric code was printed on the screen, with one code printed for each level of nesting or each time a sub-routine was entered. That way, if the program were to lock for some reason, one could deduce where it locked by looking at the codes that were on the screen. I learned a lot about bitwise operations because inter-thread communications were handled by setting bits in a particular area of memory. Memory limitations made every bit precious, and so I had to think differently about how I coded (this was in C). While this wasn't an embedded environment, the limitations sometimes made it feel like one. I started out as a developer, and eventually became the manager of the department. Later I moved on to be involved in configuration control for one of the tech company's Premiere bought, moving back into my favored environment of unix. Achievements at Premiere Technologies Here are a few of the notable things that I did while in the employ of Premiere Technologies.
|
|
|
|
Something wrong with this page or this site? Let the webmaster know by clicking HERE |
|
This website designed, implemented, and maintained by Corey Dulecki
© 2009-2012, Corey's Consulting LLC |