Pagination provides the physical addresses of the same process could not be allocated contiguously.
The basic method of paging plans to divide the physical memory into fixed size blocks called frames and logical memory into blocks of equal size, called pages (the size could theoretically be different). When you need to run a job, you load your pages into frames available, taking them from the secondary memory, which is also divided into blocks of fixed size.
In this way the process is allocated in physical memory at any part is possible. To run a job of size n pages, need to find n frames available and load the program.
Pagination solves the external fragmentation, internal fragmentation, but creates in those who do not all blocks have size multiple of the amount of fixed blocks.
The problem of internal fragmentation might suggest, that a smaller page size, better performance garantistica. This reasoning is true only in part, because, by increasing the size of the pages, it reduces the overhead carried by the table ensures that the conversion of logical addresses and physical ones.
To ensure proper operation of the paging is needed is a mechanism of translation of logical addresses into physical addresses.
The implementation of this mechanism is storing the table in main memory paging.
The OS manages physical memory so it must know which frames are free and to whom they belong. Storing this information is carried by a structure called the table of frames.
The performance of the paging depends on the size of the pages.
In case of use of the paging memory protection is ensured by some protection bit. With these bits you can determine if a page you can read / write. These data can be analyzed when calculating the physical address.
The segmentation is a diagram of memory on the user side, which allows to manage a representation of the memory familiar to the user. The programs are divided into entities with different functions, the purpose of segmentation is to define these entities and associate them with physical addresses. In C, for example, a program is divided into several parts (code, variables, heap, library stacks, ...). Each part is associated with a different segment and any entities it contains an offset within the entity.
Each segment is then given a number, so as to make it more easily recognizable.
The physical address of the object is often calculated by adding the id of the segment and offset.