본문 바로가기

컴퓨터 시스템 이야기

(8)
시그널 핸들러 작성하기 안전한 시그널의 처리 안전한 핸들러를 작성하는 보수적인 지침들을 알아보자 핸들러는 가능한 간단하게 유지하라 Call only async-signal-safe functions in your handlers. 안전한 함수는 재진입 가능하거나, 어떤 시그널 핸들러에 의해 중단될 수 없기 때문에 어떤 시그널 핸들러로부터 안전하게 호출될 수 있는 특성을 가짐 errno를 저장하고 복원하라, errno를 핸들러에 진입할 때 지역변수에 저장하고, 핸들러가 리턴하기 전에 복원함 전역 변수들은 volatile로 선언하라. 컴파일러는 레지스터에 캐시 되어 있는 g값을 사용해도 안전할 것처럼 생각해서 갱신 값이 안 보일 수가 있다.(자세한 이유는 여기로 --> https://kspsd.tistory.com/40) 정확한 ..
Exceptional control flow 줄여서 ECF 라 한다. 프로그램 카운터는 연속된 값들을 가정하고 움직인다. 특정 주소에서 다른 주소로의 전환을 control transfer라 한다. 가장 간단한 유형의 control flow는 점진적인 순서로 메모리에 있는 경우이다. 갑자기 인접해 있지 않은 명령어로 넘어가는 경우도 있는데, 이러한 경우들도 우리가 흔히 아는 jump, call, return 같은 인스트럭션들에 의해 발생한다. 그러나 시스템들은 또한 내부 프로그램 변수에 의해 표시되지 않으며, 프로그램 실행과는 반드시 관련되지 않은 시스템 상태 변화도 반응해야 한다. 예를 들면 하드웨어 타이머가 규칙적으로 꺼지는 것과 패킷들이 네트워크 어댑터에 도착하고 메모리에 저장되는 것과 같은 일들이다. 이와 같은 급격한 변화를 ECF라 한다. ..
네트워크 프로그래밍 (수정중) 네트워크 애플리케이션들은 동일한 기본적인 프로그래밍 모델에 기초하고 있다. 이들은 비슷한 전체 논리 구조를 가지며, 동일한 프로그래밍 인터페이스를 사용한다. 11.1 클라이 언트-서버 프로그래밍 모델 모든 네트워크 애플리케이션 프로그램은 클라이언트-서버 모델에 기초하고 있다. 클라이언트-서버 모델에서 근본적인 연산은 트랜잭션이다. 클라이언트-서버 트랜잭션은 4단계로 구성된다. (여기서 말하는 트랜잭션은 DB에서 말하는 트랜잭션과는 다르다. 단순한 수행한 일련의 단계를 의미함) 클라이언트가 서비스를 필요할 때, 한 개의 요청을 서버로 보내는 것으로 트랜잭션을 게시. 서버는 요청을 받고 해석후 자신의 자원들을 적절한 방법으로 조작. 예를 들어 웹 서버가 브라우저로부터 요청받으면 디스크 파일을 읽음 서버는 응..
copy on write 컴퓨터의 한정된 자원을 서로 다른 두 개의 프로세스가 공유할 때 유용하게 쓸 수 있다. 프로세스 2개가 있다고 해보자 private object는 공유 객체와 똑같은 방법으로 만들어지고, 두 개의 프로세스가 한 개의 사적 객체를 서로 다른 자신의 가상 메모리 영역으로 매핑하지만 객체의 동일한 사본을 공유하는 경우를 보여줌, area struct는 copy-on-write로 표시됨. 두 프로세스가 모두 자신의 사적 영역에 쓰려고 하지 않는 한, 이들은 물리 메모리에 단 한 개의 객체 사본을 계속 공유한다. 하지만 한 프로세스가 사적 영역 내의 일부 페이지에 쓰려고 하는 순간 쓰기 작업은 보호 오류를 유발한다 이때 오류 핸들러가 보호 예외가 발생한 것을 알고 새로운 물리 페이지에 새로운 사본을 만들고 , 페..
Memory system 간단하게 CS:APP의 연습문제 9.4번을 풀면서 메모리, 캐시, 가상 메모리에 대해 정리해보려 한다. 문제에서 주어진 것 처럼 Virtual address가 0x03d7일 때 시스템이 어떻게 가상 주소를 물리 주소로 번역하고, 캐시를 접근하는지를 보겠다. 주어진 가상 주소를 bit 형태로 써보면 00 0011 1101 0111 이고, 여기서 TLB에 접근하기 위해 태그와 인덱스를 구해보면, 주어진 문제에서 4개의 집합을 가지니, VPN(0x0F)의 2개 하위 비트들이 집합 인덱스(TLBI)(0x03)로 사용되고, 나머지 6개의 상위 비트들은 태그(TLBT)(0x03)로 사용된다. 여기서 VPO(0x17)는 페이지의 크기가 2^6 =64바이트 이기 때문에, 하위 6비트에 해당하고 PPO 또한 물리 메모리..
Chapter 1 컴퓨터 시스템으로의 여행(1.8 ~ 끝) 1.8 시스템은 네트워크를 사용하여 다른 시스템과 통신한다 개별 시스템의 관점에서 볼 때, 네트워크는 단지 또 다른 입출력 장치로 볼 수 있다. 시스템이 메인 메모리로부터 네트워크 어댑터로 일련의 바이트를 복사할 때, 데이터는 로컬 디스크 드라이브 대신에 네트워크를 통해서 다른 컴퓨터로 이동된다. 마찬가지로 시스템은 다른 컴퓨터로부터 받은 데이터를 읽어서 메인 메모리에 복사할 수 있다. hello 예제로 돌아가서 , telnet응용을 사용하여 hello프로그램을 다른 곳에 위치한 컴퓨터에서 실행할 수 있다. telnet 클라이언트를 사용하여 로컬 컴퓨터를 원격 컴퓨터의 telnet 서버와 연결하려 한다고 하자. 원격지 컴퓨터에 로그인하고 쉘을 실행시킨 후에 원격지 쉘은 입력 명령을 기다린다. 다음은 과정..
Chapter 1 컴퓨터 시스템으로의 여행(1.5 캐시가 중요하다~1.7.4 파일) 1.5 캐시가 중요하다 프로그램을 실행하는 예제로부터 얻게 되는 교훈은 시스템이 정보를 한 곳에서 다른 곳으로 이동시키는 일에 많은 시간을 보낸다는 것이다. 프로그램의 기계어 인스트럭션들과 코드인 데이터 스트링들은 본래 하드 디스크에 저장되어 있었다. 프로그램이 로딩될 때 메인 메모리로 복사되고 데이터 스트링들은 디스플레이 장치로 복사된다. 프로그래머의 관점에서 보면, 이러한 과정들은 프로그램의 '실제 작업'을 느리게 하는 오버헤드다. 그래서 시스템 설계자들의 목적은 가능한 복사 과정들을 빠르게 동작하도록 하는 것이다. 마찬가지로 일반적인 레지스터 파일은 수백 바이트의 정보를 저장하는 반면, 메인 메모리의 경우는 십억 개의 바이트를 저장, 그러나 프로세서는 레지스터 파일의 데이터를 읽는 데 메모리의 경우..
Chapter 1 컴퓨터 시스템으로의 여행 CS:APP 3판(컴퓨터 시스템) 을 읽어 나가면서 간단히 정리하려고 한다. https://book.naver.com/bookdb/book_detail.nhn?bid=11037688 컴퓨터 시스템 ▶ 이 책은 컴퓨터 시스템에 대해 다룬 이론서입니다. 컴퓨터 시스템의 기초적이고 전반적인 내용을 학습할 수 있도록 구성했습니다. book.naver.com 1장은 유명한 "hello world" 프로그램의 일생 주기를 추적해서 컴퓨터 시스템에서의 주요 아이디어들을 소개한다. 책 처음 부분에 전체적인 구성을 설명해 주는데 읽어보면 좋을 것 같다. 1.1 정보는 비트와 컨텍스트로 이루어진다 소스 프로그램은 0 또는 1로 표현되는 비트의 연속, 비트 8개로 이루어진 바이트로 텍스트 문자를 나타냄. 대부분 컴퓨터 시스..