본격적으로 공부하기에 앞서 기본적으로 알아야 할 C++ 주제들을 정리해봤다. C++ 코드 기초#include int main(){ std::cout #include 은 전처리기 지시문으로 콘솔에서 텍스트를 읽고 쓸 수 있게 해주는 C++ 표준 라이브러리의 일부 내용을 사용하고 싶다는 것을 나타낸다. int main()형식의 함수이름(식별자)는 함수를 작성할 것이라고 컴파일러에게 알리는 역할이다.또한 모든 프로그램에는 main함수가 있어야 하며 없을 시 링크에 실패한다. std::cout return은 반환문이다. 프로그램의 실행이 끝나면 프로그램은 성공적으로 실행되었는지 여부를 나타내기 위해 운영 체제에 값을 보낸다. 위 예시에서return 문은 운영 체제에 0을 반환하는데, 이것은 "오류 없이 괜..
프로그램을 작성하는 데에 여러 방식이 있다. CPU가 직접 이해할 수 있는 기계어, 어셈블러 프로그램을 사용하는 어셈블리 언어, 가독성 및 이식성 문제를 해결하기 위해 나온 C, C++같은 고급 언어 등으로 프로그램을 직접 작성할 수 있다.하지만 기계어를 제외한 나머지 언어들은 프로그램이 실행되기 전에 컴퓨터가 이해할 수 있는 기계어 형식으로 변환되어야 한다.이때 필요한 것이 컴파일러이다. 컴파일러와 인터프리터 컴파일러는 소스코드를 읽고 이 코드를 다른 언어로 번역하는 프로그램이다. 고급 언어 소스코드가 컴파일러에 의해 번역되고, 실행 가능한 파일 (exe) 이 생성된다.그래서 컴파일된 프로그램의 장점으로, 컴파일된 프로그램을 배포할 때 소스 코드를 배포할 필요가 없다.(exe파일) 다음은 소스..
C++. 많이 사용되고 중요한 언어이다. 하지만 그럼에도 난 아직 C++을 다룰줄 모른다. 지금까진 어떻게든 미뤄왔는데 더이상 미룰 수가 없어서 반 강제로 시작하게 됐다. (코딩테스트도 있고..)마침 에타에서 같이 c++을 공부할 스터디원을 구하길래 같이 공부하기로 했다.언젠가 공부해야지.. 그동안 그저 생각만 하고 있었는데, 이렇게라도 시작하는 것에 감사하고있다. 어디서 어느 교재로 공부할 것인지 스터디원과 쪽지를 주고받던 중"어? 뭐야 너였어?""아니 형! ㅋㅋ 형이었어? 뭐야 ㅋㅋㅋ" 정말 우연히도 같은 동기가 올린 글이었다. 당시엔 아직 본가에 있을 때라서 직접 만나진 않고, 디스코드 화면공유로 공부하고 있는 화면을 서로 보여주는 형식으로 일정 시간동안 같이 공부했다. 아는 사이라서 물어보..
지난 포스팅에서 짧게 알아본 cpu 가상화는 time sharing에 의해 구현될 수 있었다. 이제 cpu 가상화의 구체적인 기법 또는 mechanism에 대해 알아보겠다. 우선 cpu 가상화를 하기 위해 해결해야 하는 문제가 있다. 1. 어떻게 시스템의 성능 저하 없이 (과도한 오버헤드를 추가하지 않고) 가상화를 구현할 수 있을까? 2. 동시에 프로세스를 여러개 time sharing을 해가며 실행시킬 때 운영체제가 어떻게 cpu에 대한 control을 유지할 수 있을까? 운영체제 개발자들은 프로그램을 빠르게 실행하기 위하여 제한적 직접 실행 Limited Direct Execution기법을 개발했다. 여기서 직접 실행 Direct Execution 은 운영체제가 프로그램을 cpu에서 직접 실행시키는 ..
예시를 통하여 알기 쉽게 Process API 세 가지를 우선 알아볼 것이다. 아래는 LINUX나 net과 같은 unix계통의 운영체제에서 돌아가는 코드 예시이다. 이러한 unix계통의 운영체제는 새로운 프로세스를 만들 때 fork()라는 api를 사용한다. (SYSTEM CALL의 종류) 위 예시는 p1.c라는 프로그램을 fork라는 함수(시스템 콜)을 호출하여 새로운 프로세스를 생성한다. 프로그램이 직접 새로운 프로세스를 생성할 순 없기 때문에 프로그램이 fork()를 호출하면 제어권이 운영체제로 넘어가고 운영체제 안의 시스템콜 sys_fork()함수가 실행되어 프로세스를 생성하는 것이다. unix 시스템에서는 새로운 프로세스를 만들 때 완전히 새로운 것을 만드는게 아니라 fork라는 시스템콜을 호출..
프로세스의 실행 과정 소스코드를 컴파일하면 실행파일exe이 나옴 >> 이 exe파일은 디스크에 code와 data부분으로 나눠져서 저장됨 >> 프로그램을 실행하면 디스크에서 메모리로 프로그램이 복사되고, 프로세서는 메모리의 명령어를 cpu의 레지스터로 복사하여 실행된다. 이렇게 프로세서는 주로 메모리와 레지스터로 구성된다. 프로세스를 쉽게 다룰 수 있게 해주는 api들이 있다. 그 중 새로운 프로세스를 만드는 api Create가 실행되는 과정에 대해 알아보자. 1. 디스크에 있던 프로그램 코드를 메모리(address sapce)에 복사한다. 2. 운영체제는 프로세스의 원활한 실행을 위해서 프로세스가 실행 될 때 stack을 할당해준다. 스택은 함수의 실행이 끝나면 소멸되는 지역변수, 함수의 입력값으로 ..