u2l => Unix 시스템을 Linux 환경으로 마이그레이션 유닉스 - 상용 소프트웨어 리눅스 - 공개 소프트웨어 리눅스의 장점: 무료 라이선스, 도입비용 절감, TCO절감의 장점을 가지고 있다. (TCO = Total Cost of Ownership) 여러 벤더 제품에 종속성이 크지 않아 다양한 HW/SW 선택이 가능하다. (호환성 양호) 이기종 시스템간 호환성 및 클라우드에 적합한 환경 -> 오픈 플랫폼이 증가 쓰레드 구조가 단순하고 java환경에 탁월한 장점을 지니고 있다. 커널의 독립성으로 유연성있게 특정 하드웨어에만 지원되지 않는다. 제일 중요한점은, 다양한 cpu를 지원하고 다양한 플랫폼을 통해 하드웨어의 성능을 최대치로 끌어올릴 수가 있다.
공유메모리 보통은 프로세스에서 사용하는 메모리 영역은 해당 프로세스만 사용할 수 있다. 하지만, 프로프레임 영역에서는 한 서비스와 연동되는 기타 서비스들 모두가 함께 쓰는 영역이 필요할 때가 있다. 이러한 일들이 공유메모리가 가능케 해준다 모든 프로세스는 업무를 처리하기 위한 공간을 가지게 된다. 이런 공간에 들어가는 내용들은 커널 명령어, 초기화된 데이터, 함수호출시 필요한 정보, 동적할당이 이뤄지는 데이터등이 있다. 메모리 공간을 얻기 위해선 커널에 요구를 해야한다. 그 뒤, 만들어진 공간은 요청한 프로세스만 접근이 가능하다. 요청한 프로세스뿐 아닌, 다른 여러 프로세스가 이러한 공간접근이 필요할 경우, 공유 메모리를 사용한다. 공유메모리는 IPC중에서 가장 빠른 수행속도를 보여준다. -> IPC :..
#include #include #define SZ 7 int queue[SZ]; int front = 0; int rear = 0; int isEmpty() { return (rear == front); } int isFull() { return ((rear + 1) % SZ == front); } int deque() { if (isEmpty() == 1) { return -999; } int temp = queue[front]; front = (front + 1) % SZ; return temp; } void enque(int n) { int if100 = 0; if (isFull() == 1) { return; } if (n == 100) { while (isEmpty() == 0) { if100..
#include #include #define SZ 100 int stack[SZ]; int top = -1; int isEmpty() { return (top == -1); } int isFull() { return (top == (SZ - 1)); } int pop() { if (isEmpty() == 1) { return -999; } int temp; temp = stack[top--]; return temp; } void push(int n) { int if100 = 0; int popped = 0; if (isFull() == 1) { return; } if (n == 100) { while (isEmpty() == 0) { popped = pop(); if100 = if100 + popped..
#include #include #define SZ 5 int queue[SZ]; int front = 0; int rear = 0; int isEmpty() { return (rear == front); } int isFull() { return ((rear + 1) % SZ == front); } void enque(int n) { if (isFull() == 1) { return; } queue[rear] = n; rear = (rear + 1) % SZ; return; } int deque() { if (isEmpty() == 1) { return -999; } int temp = queue[front]; front = (front + 1) % SZ; return temp; } int main(v..
#include #include #define SZ 5 int stack[SZ]; int top = -1; int isEmpty() { return (top == -1); } int isFull() { return (top == (SZ - 1)); } void push(int n) { if (isFull() == 1) { return; } stack[++top] = n; return; } int pop() { if (isEmpty() == 1) { return -999; } int temp; temp = stack[top--]; return temp; } int main(void) { int n, data; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("..
#include #include //node 구조체정의 struct node { int data; struct node *next; struct node *prev; }; struct node* head = 0; struct statNode{ int data; int freq; struct statNode *prev; struct statNode *next; }; struct statNode *shead = 0; //returns the pointer to the node which has bigger data than _data //returns null if _data is the biggest struct statNode *whoIsBigger(int _data) { struct statNode *..
#include #include struct node { int data; struct node *next; struct node *prev; }; struct node* head = 0; void addToDLL(int n) { struct node* cur; cur = (struct node*)malloc(sizeof(struct node)); cur->data = n; cur->next = 0; cur->prev = 0; if (head == 0) { head = cur; return; } { //끝을 찾는다 struct node* temp = head; while (temp->next != 0) { temp = temp->next; } temp->next = cur; cur->prev = temp..