Operating SystemProgramming Report 1st(Priority Queue Management)Due date : 2010. 04. 06(화)학 과 : 컴퓨터 공학과학 번 : 2004151035이 름 : 이 제민설계도_1설계도_2(make_file)설계도_3(insert_queue)설계도_3(delete_queue)소스코드// ********************** 운 영 체 제 과 제 *********************** //// ****************** Priority Queue Management ******************* //// ************ 컴퓨터공학과 *** 200415135 *** 이 제민 ************ //// 실행 시 파일명을 입력하지 않을 때에는 실행할 파일을 만드는 기능을 추가하였습니다.#include #include #include #define FILE_NAME "priorityQ.dat"#define MAX_HEAD 3#define MAX_COMTIME 100// ******** Queue 구조체 ********typedef struct priority_queue *queue_pointer;struct priority_queue {int priority;int computing_time;struct priority_queue* left_link;struct priority_queue* right_link;};// ******** Queue Head 구조체 ********typedef struct queue_head *head_pointer;struct queue_head {queue_pointer link;};// ******* Queue 파일 레코드 구조체 *******typedef struct queue_record{int type;int priority;int computing_time;}Q_record;// ******** 함 수 ********void initialize_queue(void); // Queue 초기화int insert_queue(int , int ); // Queue 삽입int delete_queue(int); // Queue 삭제void print_queue(void); // Queue 출력// ***** 추가 기능 함수 *****void make_file(void); // 파일 생성void user_file(); // 사용자가 값 직접 입력void instructions(void); // 파일 생성 메뉴 출력void pause(void); // 화면 일시 정지// ******* 전 역 변 수 ********FILE *fPtr; // 입 출력 파일을 위한 포인터head_pointer head[MAX_HEAD]; // Queue Headerint main(int argc, char *argv[]) {int e;// 에러 처리 변수Q_record record;if(argc == 1) { // 실행 시 파일을 입력하지 않았을 경우 파일 생성make_file();return 0;}else if (argc == 2) { // 파일 오픈 & 실패시 에러 메시지 출력if( (fPtr = fopen( argv[1],"r" ) ) == NULL)printf("File "%s" could not be openednn",argv[1]);}else{ // 하나 이상의 파일을 입력하였을 경우printf("You can execute only one file. nn");return 0;}initialize_queue(); // Queue 초기화while( (fread(&record, sizeof( Q_record ), 1, fPtr)) != NULL) { // 파일로 부터 원소값을 읽어옴if(record.type == 0) { // 입력system("clear");print_queue();printf("Input information : insert %2d %3d n",record.priority, record.computing_time);pause();e = insert_queue(record.priority, record.computing_time);if(e != 0) // 입력 실패시printf("Insert is fail !n");else{system("clear");print_queue();pause();}}else if(record.type == 1){ // 삭제print_queue();printf("Input information : delete %2d %3d n",record.priority, record.computing_time);pause();e = delete_queue(record.priority);if( e == -1){ // 삭제 오류(큐가 비어있을 경우)printf("nDelete is fail!!nRelevant Queue is Emptyn",e);pause();}else {print_queue();pause();}}}printf("nn------------------------------------------------------------------------n");printf(" 최 종 Queuen");printf("------------------------------------------------------------------------nn");print_queue(); // 최종 Queue 출력return 0;}// ------------------------------------------------------// * Queue 초기화 *// ------------------------------------------------------void initialize_queue(void){int i;for(i=0 ; ilink = NULL;}}// ------------------------------------------------------// * Queue 삽 입 *// ------------------------------------------------------int insert_queue(int priority, int computing_time) {int Q_ID = 0;queue_pointer new_ptr, cur_ptr, pre_ptr;// **** 입력 할 노드 초기화 ****new_ptr = malloc( sizeof(struct priority_queue) );new_ptr->priority = priority;new_ptr->computing_time = computing_time;if(priority right_link;}if( pre_ptr == NULL ){ // Queue 가 비어있을 경우와head[Q_ID]->link = new_ptr;new_ptr->right_link = cur_ptr;new_ptr->left_link = NULL;if(cur_ptr != NULL) // 새로운 노드가 head에 삽입될 경우cur_ptr->left_link = new_ptr;}else { // 맨 끝에 삽입될 경우와pre_ptr->right_link = new_ptr;new_ptr->left_link = pre_ptr;new_ptr->right_link = cur_ptr;if(cur_ptr != NULL)cur_ptr->left_link = new_ptr; // 두 노드 사이에 삽입될 경우}return 0;}// ------------------------------------------------------// * Queue 삭 제 *// ------------------------------------------------------int delete_queue(int priority) {int Q_ID = 0;queue_pointer cur_ptr;if(priority link = cur_ptr->right_link; // 해당 큐의 최상위 원소를 삭제printf("nDeleted Queue ID:%d priority:%2d computing_time:%3dnn",Q_ID,cur_ptr->priority, cur_ptr->computing_time );free(cur_ptr); // 메모리 해제}return 0;}// -------------------------------------------------------// * Queue 출 력 *// -------------------------------------------------------void print_queue(void) {int i;queue_pointer tmp_ptr; // 임시 Queue 포인터for(i=0 ; ilink;if( tmp_ptr != NULL ) { // 해당 ID의 원소가 NULL 아닐때까지while(tmp_ptr != NULL){ // 한칸씩 이동하며 출력printf("|%3d %3d|-> ",tmp_ptr->priority, tmp_ptr->computing_time);tmp_ptr = tmp_ptr->right_link;}}printf("| NULL |nn");}}// *추가 함수들*// ************************ 파 일 생 성 ***************************void make_file(void){int i;char choice;srand( time(NULL) );Q_record record; // 파일의 레코드를 입력하기 위한 구조체 선언if( (fPtr = fopen(FILE_NAME,"w")) == NULL ){ // 파일 오픈 & 오류 발생시 메시지 출력 후 종료printf("File could not be opened. nn");return;}while(choice != '3') {system("clear");instructions();fflush(stdin);choice = getchar();switch(choice) { // 1:랜덤 자료값 파일 생성 2:사용자 정의 자료값 파일 생성 3:종료case '1':for(i=0 ; i
소스코드 구조1 : 실행 시 입력 파일 수에 따른 분기0-파일 생성 함수1-초기화 진행2이상 – 비정상 종료 2 : type에 따른 분기0-메모리 할당1-메모리 해제3 : 파일 끝 검사initialize_memory(int size)allocated_memory & free_memory 메모리 할당 & 초기화temp_memory = release_memory()merge_memory(free_memory)변경된 내용추가자료구조Struct free_arrInt num;Mem_pointer *link;추가 함수<레벨 체크>(max_size >= size) &&((max_size)/2 < size)i++max_size = max_size/2break변경된 내용1 : 메모리 할당 여부에 따른 분기FREE, ALLOCATEDSPLITED 2 : 요청 메모리와할당 가능 메모리 비교3 : 왼쪽에 공간이 없으면 오른쪽에 할당<초기값>free_memory[0].level = 0free_memory[0].num = 1
소프트웨어 산업현황 분석 및 발전 방향소프트웨어 공학 Report 1컴퓨터 공학과2004151035이 제민manggoo04@gmail.comContents1. 소프트웨어 산업소프트웨어 산업의 정의소프트웨어 산업 국내 현황소프트웨어 산업 국외 현황2. 소프트웨어 산업의 문제점문제점해결 방안3. 소프트웨어 산업의 발전 방향1 . 소프트웨어 산업소프트웨어 산업의 정의소프트웨어 산업이 무엇이라고 정의 내리기는 쉽지 않았다. 웹 상에서 자료를 찾아보아도 소프트웨어 산업에 대한 정의는 쉽게 찾을 수 없었다. 이로 미루어 보아 소프트웨어 산업이란 내가 평소 생각해 왔던 단순히 컴퓨터 소프트웨어를 다루는 산업뿐만 아니라 더 방대한 범위까지 포함하고 있는 것 같다.소프트웨어 산업의 정의는 찾을 수 없었지만 소프트웨어 산업을 발전시키기 위한 학문인 소프트웨어 공학에 대한 자료는 많았었다소프트웨어공학은 IEEE Computer Society의 정의에 의하면 다음과 같다: “The Application of a systematic, disciplined, quantifiable approach to development, operation, and maintenance of software; that is, the application of engineering to software”. 즉, 소프트웨어의 개발, 운영 및 유지 보수에 체계적이고, 훈련이 잘되고 정량적인 접근 방법을 적용하는 것을 의미하며, 이는 곧 소프트웨어에 공학적으로 접근하는 것을 말한다.1960년 말 NATO 컨퍼런스에서 소프트웨어 위기(Software Crisis)라는 용어가 처음 언급된 이후 소프트웨어 개발에 공학적인 접근 방법의 필요성이 제기되면서 소프트웨어공학(Software Engineering)이라는 용어가 처음 소개되었으며 이후로 약간씩의 수정이 가해졌지만 소프트웨어공학의 정의는 대체로 유사한 내용을 담고있다.소프트웨어 산업은 21세기의 유망 산업 중의 하나일 뿐만 아니라, 국가의 경쟁력 제고 차원는 3D업종이 돼 인재들이 가지 않는다"고 지적했다.명색히 SW산업을 책임지고 있는 담당 주무장관의 입에서 이런 말이 나올 정도면 국내SW산업이 얼마나 열악한 상황에 있는지를 알 수 있다.세계 산업이 고도화되고 첨단화될수록 일생생활 속에서 사용되는 각종 기기에 들어가는 SW 비중은 더욱더 늘어나고 있다. 최근 우리나라를 뒤흔든 아이폰이나 닌텐도DS의 성공은 하드웨어가 아닌 소프트웨어의 중요성을 여실히 보여준다.우리나라에 삼성전자 · LG전자 등 세계 굴지의 휴대폰업체가 있지만 스마트폰시장에서는 애플 아이폰이나 림 블랙베리, 심어지어 HTC의 구글폰에도 맥을 못추고 있다. 소프트웨어의 성장 없이는 세계 휴대폰 시장 경쟁에서 한계를 노출할 수밖에 없다는 것을 보여주는 대목이다. 비단 휴대폰뿐일까? 스마트 TV,3D TV, 타블렛PC 등 거의 모든 분야에 있어 소프트파워의 시대가 열릴 것이다.그러나 국내 SW산업의 현재 여건은 열악하기만 하다.2006년 경제협력개발기구(OECD)의 ‘OECD 국가 GDP 대비 지식투자 현황’을 살펴보면 소프트웨어 분야만 유일하게 OECD 국가의 평균 이하인 1.3%를 기록하고 있다. 이 수치는 그만큼 정부의 소프트웨어 지원사업이 소극적이라는 것을 말해 주고 있다.상황이 이렇다 보니 대학에서 소프트웨어를 전공하는 학생 수도 10년 전에 비해 급감하는 추세다. 자연히 소프트웨어 산업에 우수한 인력이 유입될 리 만무하다. 이처럼 소프트웨어 전문인력들이 냉대받는 구조가 계속되는 한 국내 소프트웨어 산업의 미래는 암울하다왜 미국이 세계적인 소프트웨어 강국인지는 지난해 미국 최고의 직업을 조사한 아래의 도표를 보면 이해할 수 있다.구직전문사이트 커리어캐스트닷컴은 노동환경과 수입, 고용전망, 스트레스, 육체노동 정도 등 다섯 가지 항목을 기준으로 미국 200개 직업을 분석해 발표했다. 여기서 소프트웨어 엔지니어는 보험계리사에 이어 2번째 2009년 최고의 직업으로 선정되었다.그만큼 미국 소프트웨어 엔지니어가 높은 연봉을 받고, 근무환경도 쾌적하하고 있다고 응답한 CEO는 23%에 그쳤고 조만간 추진할 계획을 세우고 있다는 응답자도 14% 뿐이었다. 아직 절반 이상의 CEO들이 검토하지 않았으며 도입할 계획이 없다고 응답한 것이다.스마트폰을 활용하는 업무에 대해서도 `마케팅`이라는 응답자가 대부분으로 나타나 아직 스마트폰의 업무 활용 범위가 한정돼 있는 것으로 나타났다.“스마트폰의 대명사가 된 아이폰”가히 혁명적이라할 수 있을 만한 수익구조이다. 세계 1,2위 업체인 노키아와 삼성을 제치고 올 3분기 영업이익에서 애플이 아이폰하나로 더 많은 영업이익을 거두었다고 한다. 그 성공의 원인으로 크게 두 가지를 꼽는다. 수 많은 응용 소프트웨어를 통해 유틸리티를 높인 점, 그리고 혁신적인 디자인과 편리한 조작방법으로 사용자들의 감성을 자극한 점이 그것이다.“구글 VS 애플 VS 마이크로소프트”언제부터인가 인터넷 검색, 휴대폰, 컴퓨터 소프트웨어 시장에서 구글, 애플, 그리고 마이크로 소프트의 경계선은 모호해 졌습니다. 세 업체 모두 사업의 시작은 다르게 시작 했지만 시간이 흐르면서 점점 경쟁업체의 입지까지 파고들면서 IT 모든 분야에서 서로 경쟁하는 상황이 오고 말았습니다.현재 구글은 가장 강력한 검색엔진으로 높은 시장 점유율을 보이고 있는데요... 마이크로소프트는 몇년전부터 인터넷 검색시장에서 구글을 따라잡기 위해 많은 노력을 해 왔습니다. Yahoo를 인수하려고도 시도 했었고... 최근 Bing 검색 사이트를 오픈하면서 예전 MSN 검색에서 한단계 성장한 모습을 보여주려고 노력을 하고 있습니다. 하지만 점유율은 많이 낮은 편이죠애플의 아이폰은 현재 스마트폰 시장에서 가장 우위를 보이고 있습니다. 애플의 아이폰을 따라 잡기 위해서 지난달 구글은 넥서스원이라는 스마트폰을 공개 했습니다. 하지만 시장의 반응은 매우 냉담한 상황 입니다.마이크로소프트와 애플의 관계는 오래전부터 이어져 왔는데요... 두 회사를 대표하는 스티브 잡스와 빌게이츠 (지금은 은퇴를 했죠)를 오래전부터 사람들은 비교해 왔었고... Wind산업 기반 미약소프트웨어 산업은 대기업이나 정부가 주도하기 어려운 구조적 특징이 있다.시장 수요에 기반을 두고 기술력을 중심으로 제품개발에 진력하는 중소기업이 없이는 소프트웨어 산업의 발전은 기대하기 어렵다. 그러나 한국의 중소기업들은 인적, 물적 기반의 한계로 매우 취약한 경영 및 기술 구조를 지니고 있다.이러한 기반 미비로 인해 MS, 오라클 등 소수 글로벌 기업 제품이 한국 시장을 주도하고 있고 국내 기업들이 경쟁력을 발휘하고 있는 영역에 있어서도 과당경쟁에 따른 수익성 악화, 낮은 유지보수비 등으로 관련 업체들은 어려움을 겪고 있다. 이로 인해 기술투자와 인력 양성 등 소프트웨어 기업들의 혁신 역량 강화를 위한 재투자는 크게 미흡한 실정이다.중소벤처 기업 제품 상용화 및 해외 진출의 한계한국의 중소기업이 상당한 수준의 소프트웨어를 생산해 내도 실제 판매로 연결시키기는 매우 어렵다. 중소 벤처에서 나온 소프트웨어의 안정성과 시장인지도 등의 문제로 사용자를 확보하기가 용이치 않기 때문이다. 또한 외국산 소프트웨어의 저가공세는 중소 소프트웨어 기업의 시장진입을 더욱 어렵게 하는 요인이 되고 있다.또한 정부에서는 내수 보다는 해외진출을 강조하고 있으나 현실적으로는 대부분의 기업이 해외로 진출하기에 충분한 역량을 갖추지 못하고 있는 경우가 많다. 또한 한국 시장에서의 실증 부족으로 해외에서도 제품과 서비스의 신뢰를 형성하기 어렵다.불법 복제 및 소비자 인식 부족국내 소비자들의 불법 복제 남발과 지적재산권에 대한 소비자 인식부족은 소프트웨어 산업 발전에 가장 큰 문제점 중 하나다.경쟁국 일본의 경우에는 불법 복제 소프트웨어 비율이 5% 내외에 불과한 반면 국내에서는 불법 복제 사용률이 얼마인지에 대한 구체적인 데이터를 산출하기도 어려운 현실이다. 이러한 현상은 소프트웨어는 공짜고 HW는 사야 된다는 소비자의 의식에서 비롯된 측면이 많다.정부의 정책적 문제공공기관 서버의 72%, 운영체제의 90%가 외산일 정도로 국내 소프트웨어 산업에 대한 정부의 현실 인식은 현저 원인”이라고 말했다.출처 : 한겨례 Hyperlink "http://www.hani.co.kr/arti/economy/economy_general/337605.html" http://www.hani.co.kr/arti/economy/economy_general/337605.html우리나라의 소프트웨어산업이 현재 수준에 머물러 있는 이유가 나는 기업이나 불법 복제 소프트웨어를 사용하는 사용자에게만 있는 줄로 알았는데 정부에서도 많은 문제가 있는 것을 알게 되었다.기업에서도 품질보다 결과, 납기일을 중요시 여기는 풍토도 아마 정부에서 실적을 요구하여 생긴 풍토가 아닐까 하는 생각도 해보았다. 정부에서 소프트웨어 산업에 대한 인식과 태도가 바뀌지 않는 한 우리나라 소프트웨어산업의 미래는 결코 밝을 수 없다. “왜 닌텐도 게임기 같은 것을 못만드냐?”가 아니라 “어떻게 하면 닌텐도 게임기를 만들 수 있을까?” 라는 생각의 전환이 필요할 것 같다.2.1 해결 방안아이패드가 출시된 지 일주일 만에 정부가 소프트웨어산업 육성 종합대책을 내놓은 것은 하드웨어만으로는 IT 강국이 될 수 없다는 판단에서다. 여기에는 우리나라의 IT산업 구조가 반도체 LCD 초고속 인터넷 등 HW와 통신 인프라는 우수하지만 SW 분야는 크게 낙후돼 있어 불균형을 해소해야한다는 의지가 담겨있다.실제 아이패드 출시 후 국내 전문가들은 IT 산업 주도권이 HW와 통신에서 SW와 콘텐츠로 넘어가는 패러다임 전환이 가속화될 것이라고 지적해 왔다.실제한국 IT 산업에서 HW와SW간 불균형 정도는 매우 심각하다. IT 총 생산액중 HW가 73%를 차지하는 반면 SW는 8%에 불과하다. 반면 세계 시장은 SW 중심으로 나아가고 있다는 점에서 한국 IT산업의 심각성은 가중된다. 2008년 기준으로 전 세계 IT 산업에서 SW시장은 30%로 HW시장의 22.4%보다 크다이러한 심각성 때문에 정부는 SW산업을 육성할 수 있는 방안을 총동원했다. 정부가 이날 내놓은 대책은 SW 생태계 재편, SW 융합 수요 창출,S19