In this module, we're going to take a closer look at the components of a Unix system. Let's start with a bit of background into how Unix was written. C was developed to make Unix independent of hardware architecture. When the Unix kernel and shell, were written in C, it made programming and debugging easier. C was developed by programmers, for programmers, C compilers were made available for different Unix versions. In the late 1970s, the popularity of C grew and C compilers became available for a large number of processes and for a large number of operating systems. C has a rich set of functions that deal with all aspects of data manipulation, IO, math, and character functions. The ability of CTU is more traditional high level constructs, gives the programmer elegance and flexibility while maintaining the options for robo power. C++ is an object-oriented version of C that has become popular with object oriented design and programming. A Unix system is usually represented as a set of circles with functions in layers. The first layer is the hardware which interfaces directly with the kernel. The kernel is the base operating system which provides services for other layers. Built on the kernel is the command interface, often called the Shell, and the commands and the utilities. There are a number of different shells available for Unix systems. The last layer is the application programs which are built on the application programming interfaces, the Shell and the commands, and the utilities. The Unix kernel is the base operating system. Most of the kernel is indeed written in C, which makes it easy to put to other processes. There are routines that are dependent on the machine architecture for functions like memory mapping and interrupt handling. The kernel provides basic functions like process scheduling, memory management, device control, and fall management. There's also a system called interface and there's an operator interface. Unix is implemented in the layered approach that's shown here. At the base, there is the specific manufacturers hardware. Unique hardware interface is provided to achieve complete hardware independence, it's partially written in assembler and partially written in C. This is the only vendor specific part of the Unix implementation, the upper levels of Unix, well, as we know, those are all written in C. Now, the command interface in a Unix system is called the shell. Why shell? Because it's the outermost layer of a Unix system. It serves as a command language interpreter and programming language and allows foreground and background processing. When you log onto a Unix system, you start to communicate with the shell. The shell can be compared to TSO in a z/OS system. Essentially the shell is a program which allows users to communicate with the operating system. The shell reads commands that are entered and interprets them as requests to execute other programs, access files, or provide output. The shell doesn't really have a user-friendly interface, it's driven by commands, which if you're unfamiliar with them, they can seem a bit cryptic. But programmers and system programmers like it because of its power. Today though vendors do provide solutions for Unix users to replace the shell interface for the window interface or menu-driven interface, which is easier to use for users who aren't already familiar with Unix command syntax. There are two native command interface shells; the Bourne shell is the most basic shell and it's the default z/OS Unix shell. The C shell has the functionality of the C language and is preferred by many programmers. Access the command line and many Unix-like operating system, and there's a good chance you'll find a bash shell. Bash has become the default shell on both Linux and macOS, making the ability to work with it on essential skill for pretty much any software developer. Bash, which stands for, wait for it, Bourne again shell, was designed as a replacement for the Bourne shell and is available on z through rocket software. Now, in the next video, we'll look at some fundamental functions of Unix, starting with commands.