- [ Computer science/OS ][CS] 명령어의 구조와 명령어 주소 지정 방식2022-12-27 23:41:05프로그램을 개발할 때 우리는 '소스코드' 를 작성하고, 컴파일러를 통해 컴파일 되어 컴퓨터가 이해할 수 있는 '저급 언어'로 변환되어 실행된다. 저급 언어는 명령어들로 이루어져 있는데, 그럼 명령어 하나하나는 어떻게 생겼을까? *참고: 저급언어는 기계어, 어셈블리어로 구성되어 있다. 둘 다 명령어의 집합임 명령어의 구조 사람이 누군가에게 명령을 한다면 아마 이런식으로 명령을 할 것이다. "학생들, 다음 주까지 과제를 제출하세요." 컴퓨터의 명령어 구조도 이와 마찬가지다. 컴퓨터는 '무엇을 대상으로, 무엇을 수행하라' 식의 명령어 구조를 가지고 있다. 컴퓨터는 아래의 사진과 같이 명령어 구조를 이루고 있다. 왼쪽에는 수행할 연산, 오른쪽은 연산에 사용될 데이터 혹은 연산에 사용될 데이터가 저장된 위치를 담..
- [ Computer science/OS ][CS] 공유 자원(Shared Resource)과 임계구역(Critical Section), 세마포어(Semaphore) - 추가예정2022-12-21 11:00:28프로세스는 독립적으로 작업을 할 수도 있고, 공유된 자원을 가지고 공동 작업을 할 수도 있다. 하지만 여러 프로세스가 한정된 자원을 가지고 공동으로 작업할 때 발생할 수 있는 문제와 이를 해결할 수 있는 방법을 알아보고자 한다. 공유 자원의 접근 공유 자원(Shared Resource)은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다. 공유 자원은 공동으로 이용되기 때문에 누가 언제 데이터를 읽거나 쓰느냐에 따라 그 결과가 달라질 수 있다. **따라서 프로세스들의 공유 자원 접근 순서를 정하여 예상치 못한 문제가 발생하지 않도록 해야 한다.** HTML 삽입 미리보기할 수 없는 소스 임계구역(Critical Section) 공유 자원 접근 순서에 따라 실행 결과가 달라지는 프로그램의..
- [ Computer science/OS ][CS] CGI(Common Gateway Interface), 웹 컨텐츠의 이해(정적, 동적)2022-12-11 22:49:49CGI(Common Gateway Interface)란? CGI란 공통 게이트웨이 인터페이스(Common Gateway Interface)의 약어로, 웹 서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다. 웹 서버와 응용프로그램이 상호 작용하여 동적 컨텐츠를 제공해주고, 웹 서버와 수많은 언어들로 만든 프로그램이 상호 작용하기 위한 표준화 된 약속이 필요한데, 바로 그 약속이 CGI(Common Gateway Interface) 기술이다. CGI의 기능 웹 서버 프로그램의 핵심 기능은 미리 준비된 정보를 클라이언트의 요구에 응답하는 것이다. 즉, 초기의 웹 서버는 이미 준비된 자료인 '정적 컨텐츠'의 정보만 제공해 줄 수 있었다. 사용자로부터 입력을 받아 정보를 동적으로 생성하고 클..
- [ Computer science/OS ][CS] 커널(Kernel) & 시스템 콜(System Call) & 인터럽트(Interrupt)2022-12-04 00:27:07커널(Kernel)과 인터페이스(Interface) 커널(Kernel) 커널(Kernel)은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것으로, 자동차에 비유하자면 엔진에 해당된다. 자동차는 종류가 다양하지만 성능은 엔진이 좌우하는데, 이와 마찬가지로 운영체제의 성능은 커널이 좌우한다. 커널이 존재하는 이유는 시스템을 보호하기 위해 존재한다. 만약 커널이 없다면 우리가 작성한 프로그램이 함부로 하드웨어 자원을 다 점유해서 사용하고, 그래서 다른 프로세스가 영향을 받게되고, 그러다보면 전체 시스템이 붕괴될 수 있는 여러 가지 위험한 부분들을 방지하기 위해 시스템에 전반된 부분이나 하드웨어에 관련된 부분은 커널이 관리하게 된다. 따라서 우리가 작성한 프로그램은 커..
- [ Computer science/OS ][CS] 동적 메모리 할당(DYNAMIC MEMORY ALLOCATION), malloc/free C언어로 구현하기 (CS:APP 이론정리)2022-12-02 20:43:47동적 메모리 할당C 프로그머들은 대개 추가적인 가상메모리를 런타임(runtime)에 획득할 필요가 있을 때, 동적 메모리 할당기(dynamic memory allocator)를 사용하는 것이 저언어(e.g. mmap, munmap 함수) 를 사용하는 것보다 간편하다고 생각했다. 동적 메모리 할당기는 프로세스의 가상메모리의 힙(heap) 영역을 관리하는데, 힙 영역은 uninitialized data 영역 직후에 시작해서 주소가 올라가는 방향으로 힙의 사이즈는 커진다. 즉, 주소값이 커짐으로서 힙의 크기도 늘어나는 것이다. 아래 이미지는 리눅스 프로세스의 가상메모리 구조인데, 각각의 프로세스에 대해서 커널은 힙의 꼭대기를 가리키는 변수 brk를 사용해서 heap의 꼭대기를 가리키도록 한다. 즉, 힙의 최대..