본문 바로가기

STUDY

(30)
synchronization multi-threaded system에서는 shrared date를 사용하는 경우가 있다. 당연히 multi-process에서도 발생한다. 이 경우 실행 순서 조절과 동기화 처리는 필수이다. synchronization - shared resources - coordinate the execution order 만약 synchronization이 되어 있지 않다면 어떤일이 발생할까? race condition : concurrent thread/process들이 shared data에 경쟁적으로 접근하는 상황 -> context switch를 연산자 단위가 아니라 시간 단위로 나누어서 처리하기 때문에 instruction 순서가 변경되기 때문에 발생한다. 이러한 race condition은 non-de..
process scheduling 앞에서 배운 process에서 cpu는 처리량을 늘리기 위해서 context switch를 한다고 했다. 즉 cpu는 running과 waiting의 2가지 상태가 번갈아가며 수행되는 것이다. 처리하려는 작업에 따라 cpu burst가 길 수도 있고, I/O burst가 길 수도 있다. cpu burst가 긴 경우가 cpu bound, I/O burst가 긴 경우 I/O bound이다. I/O burst의 예로는 동영상 재생, 문서 편집 등이 있다. 즉 사용자와 interactive한 것이다. cpu bound의 예로는 복잡한 수식 계산 등이 있다. 천문학 수식 계산 등등... 그럼 이 작업들을 어떻게 스케쥴링 해야할까? cpu scheduler ( = short-term scheduler) : read..
multi-thread programming 앞에서 배운 multi-process programming은 마냥 좋기만 할까? 딱히 그렇지도 않다. process process는 기본적으로 Heavy-weight이다. 즉 프로세스 1개를 만드는 것은 오버헤드가 크다. 왜냐하면 process는 가진 정보가 많기 때문이다. 프로세스들은 독립적인 memory space가 필요하다. 따라서 address space가 필요하다. 또한 os resource, accounting info, hardware execution state(pc, sp, register) 등등 이러한 자료구조들을 새로 다 만들어야 한다. 당연히 오버헤드가 클 수 밖에 없다. 따라서 fork() 등으로 process를 새로 생성하는 것은 costly, 즉 비용이 많이 든다. 또한 통신을..
process concept process가 무엇인가? process는 프로그램 실행 흐름의 가장 기본적인 단위이다. 다들 이렇게 설명하는데 사실 뭔 소린지 이해가 안갈 수 있다. 그럴때는 프로그램 실행을 위한 작업의 대상, 즉 os가 scheduling하는 대상이라고 생각하면 쉽다. process - 프로그램의 실행 단위 - 프로그램 안에서 흐름을 제어하는 캡슐화 단위 - dynamic and active entity - 실행과 스케쥴링 단위 process address space process가 메모리에 저장되는 공간은 어디일까? memory의 구조는 낮은 주소부터 code, data, heap, dynamic으로 구성되어 있다. code: text segmentn로 기계어들이 저장되어 있다. data: 변하지 않는 static..
os system structure operating system structure는 다음과 같다. 사용자가 보는 user mode와 os의 영역인 kernel mode로 구분하고 이 둘을 연결하는 것이 system call interface이다. function call은 사용자가 만든 함수를 호출하는 것이지만 system call은 os가 만든 함수 즉 kernel mode로 진입하게 한다. 윈도우에서는 api라고 부르지만 리눅스는 sys call이다. 그럼 언제 운영체제가 system의 controll을 가져가는가? 1. bootstraping: 전원이 켜질때 전원이 켜질 때는 명령어들을 메모리에 올리고 실행해야 한다. 이때 최초의 명령어 주소가 0xffffff0이다. 전원이 꺼져도 남아있어야 하므로 rom bios에 저장된다. 정상..
[C] 왜 문자열은 포인터와 배열을 섞어서 쓰는 것일까? (두 개의 차이점) C를 programming language structure 적으로 분석해보면 writability가 쓰레기인 언어라서 string을 primitive data로 지원하지 않는다. 하도 욕을 먹어서 C++에서 생긴 것인가? 아무튼 그래서 C에서 string을 표현하고자 할때는 그냥 char를 배열로 나열해서 쓰는 수 밖에 없다. 음 역시 writability 쓰레기! 근데 또 짜증나는 부분은 여기다... 아니 뭐 그래서 string를 배열로 표현하라며 근데 왜 포인터로도 가능한데? 라는 것이다. 이걸 설명하자면 programming language structure적으로 분석할 수 있다. 일단 C에서 array와 pointer는 왔다 갔다리 개발자 마음대로 쓸 수 있음 근데 왜 그럴까? 왜 C에서는 포인..
about operating system 운영체제 operating system : 컴퓨터 하드웨어와 응용 프로그램 사이에서 하드웨어를 효율적으로 관리하여 사용자의 편리함을 높여줌 resource allocater (자원 할당자): 특정 프로그램과 사용자의 작업에 필요한 하드웨어 자원을 할당해줌 control program (통제 프로그램): 사용자 프로그램이나 입출력 장치의 실행을 관리, 즉 통제하여 오류나 부적절한 실행을 방지한다. computer system의 구성 요소 하드웨어: I/O device(입출력 장치), memory(기억 장치), CPU(중앙 처리 장치) 운영체제 응용 프로그램 사용자 user system program + kernel = 운영체제 -> 이때의 system program은 컴퓨터를 사용하기 위해 필수적인 프로그..
[디버그일기] C2011 - visual studio 쓰기 싫다 얘는 항상 오류를 기분 나쁘게 알려줌;; 아니 그냥 오류나서 세상이 부정적이다 클래스 형식 재정의 오류 -> 컴파일러 오류 1. 클래스 이름이 중복되었을 가능성 근데 이 오류일 가능성은 거의 낮음...과연 코드 짜면서 자기가 만든 클래스 이름도 기억 못할까..? 2. 헤더파일의 중복 이 오류의 해결은 #ifndef #define #endif 사용을 표준으로 하고 있는데 C/C++ 컴파일러는 #pragma once 한 문장만 써서 저걸 다 대체할 수도 있다. debugging - 중복된 헤더파일을 찾아서 맨 위에 #pragma once 추가해주기 끝