As others have said semaphores are IPC (interprocess communications structures).
Semaphores like all IPC are used to allow different processes to communicate with each other.
They are basically counters that are created, accessed and destroyed using special system calls, such as sempost(3), semwait(3), semget(2) and semop(2). See sem_overview(7) on a linux system for a brief description.
The definition of communicate here is pretty primitive.
"Communicate" for semaphores means reading, incrementing or decrementing a counter via the system/library calls mentioned above.
The special thing about semaphores apart from the fact that they are is that only one process at a time can perform an operation on them, and the semaphore operations are guaranteed atomic, that is to say you can't get into a race condition over a semaphore as the kernel will not swap out a process that is performing a semaphore operation.
The other special thing is that they are created in shared memory which allows multiple processes to access them.
How they manifest/created is that programs create them using semget(2).
E.g. apache creates sempahores when it runs.
ipcs -l will tell you about the system's ipc resources.
You can manipulate some system semaphore and ipc related limits with sysctls.
sysctl kernel.sem to view the sempahore related settings via sysctl.
If you want to persist any sysctl changes you try put them into