본문 바로가기

CS/컴퓨터 시스템

(10)
동기식 입출력과 비동기식 입출력 동기식 입출력과 비동기식 입출력 [ 동기식 입출력 ] 현재 CPU를 잡은 프로세스가 IO 요청을 하게 되면 IO가 끝날 때까지 그 프로세스의 후속 명령을 수행하지 않는 입출력 방식 서로 보조를 맞출 때까지 기다림 IO 요청 후 입출력 작업이 완료된 후에야 제어가 사용자 프로그램에 넘어감 2가지 구현 방식 IO 가 끝날 때까지 계속 가지고 있고 완료될 때까지 기다림 CPU를 낭비시킴 → CPU를 계속 잡고 있음 매 시점 하나의 IO만 일어날 수 있음 결국, IO 장치와 CPU 이용률이 크게 저하된다. → 그래서 2번 방식으로 구현한다. 빼앗는 방법 IO가 완료될 때까지 해당 프로세스(오랜 시간이 걸리는 IO)에게서 CPU를 빼앗아 block 상태에 놓은 후 → 당장 명령을 수행할 수 있는 ready 상태의..
Chap 7_2. 프로세스 PCB(process Control Block) = 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보 다음의 구성 요소를 가진다 (구조체로 유지) (1) OS가 관리상 사용하는 정보 • Process state(프로세스 상태 = ready, blocked) , Process ID • scheduling information, priority(CPU 우선순위 값을 두어서 운영한다) pointer를 통해 여러 PCB들을 연결할 수 있다. (줄 서있는 모습을 구현) (2) CPU 수행 관련 하드웨어 값 • Program counter, registers 프로세스의 문맥을 파악하기 위함 (어떤 값이 프로세스에 있었는지) program counter는 현재 메모리에 어떤 부분을 수행하고 있는지 가리..
Chap 7. 프로세스_1 ✔️프로세스란 “실행중인 프로그램을 말한다” ✔️프로세스의 실행과정 (1) 프로세스가 실행되면 프로세스만의 독자적인 주소 공간이 생긴다(stack, data, code) (2) 이 프로세스가 CPU를 잡게 되면 PC라는 레지스터가 이 프로세스의 코드 어느 부분을 가리키고 있고 [stack, data, code] (3) 그러면 매순간 code부분에 있는 instruction을 하나씩 읽어서 CPU 안으로 불러들인다. (4) 레지스터 안에다가 어떠한 값을 넣고 산술 논리 연산 장치에서 연산을 하고 (5) 그 결과를 레지스터에 저장하거나 또는 메모리에다가 저장하는 식으로 진행을 하고 있다. - 이 과정을 반복하는데 특정 시점에 이 프로세스는 어디까지 와있는가를 규명하기 위해 필요한 요소로 “프로세스의 문맥”이..
Chap 6. 프로그램 실행 [ 프로그램의 실행 ] 시스템 콜을 통해 커널 함수를 호출한다. → 그러면 커널 모드가 된다. 유저모드와 커널 모드가 반복된다 os는 block 단위로 읽어들인다. (timer 시간) [ 저장장치 계층구조 ] primary (Executable) [Registers] CPU안에 있음 공간은 적지만 빠른 속도로 처리를 한다. [1 Cache Memory] ISA에 포함되지 않을 수도 있고 포함될 수도 있다 메모리에서 레지스터로 올리는데 많은 내용을 올릴 때 시간이 많이 걸릴 것이다. 하지만 캐시에 저장했다가 다시 사용하고 싶으면 메인 메모리에서 레지스터로 바로 가는 것이 아니라 캐시에 저장된 값을 바로 사용하는 것이다. → 속도가 더 빨라진다. 메인메모리 보다는 빠르고 레지스터보다는 느리다. 버퍼같은 중간..
Chap 5. 컴퓨터 시스템 구조 위의 그림을 바탕으로 자세하게 설명할 수 있다. -cpu의 작업 공간이 메모리이기 때문에 cpu는 매 클럭 사이클마다 메모리에서 기계어를 하나씩 읽어서 실행을 하게 된다. -맨오른쪽에 4가지 세로로 그림이 나열되어 있다. 이들은 IO 디바이스이며 input을 담당하는 키보드, output을 담당하는 모니터, 프린터가 있다. 맨 위에 있는 것은 하드디스크인데 이는 보조 기억 장치로 볼 수 있고 IO device라고 볼 수도 있다. 왜냐하면 디스크에 있는 메모리를 읽어서 메모리로 읽어들이기도 하고(input device), 동시에 처리 결과를 디스크에 있는 파일 시스템에 저장을 하는 역할(output device)을 하기 때문이다. -device controller는 각각의 IO디바이스들은 그 디바이스를 전..
Chap 4. 운영체제란? 1. 운영체제란 ? 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층 (소프트웨어이긴 하지만 실제론 시스템 소프트웨어라고 함) 즉, application과 하드웨어를 연결하는 중간자 역할 좁은의미(협의의 운영체제) = 커널 학문적 관점에서는 운영체제를 커널로 포커싱 함 운영체제의 핵심 부분으로 메모리에 상주하는 부분 넓은 의미(광의의 운영체제) = 커널 + 알파 커널 뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념 *시스템 유틸리티 : 사용자가 사용할 수 있는 프로그램을 의미하며 주변 장치를 컨트롤하는 드라이버 같은 것들이 깔려 있다. 2. 운영체제의 목적 크게 2가지의 목적이 있다. (1) 하드웨어를 편리하게 사용할 수 있는 환경을 제공 a. ..
Chap 3 - 3. static 라이브러리와 shared 라이브러리 씨언어를 사용하여 화면에 결과를 출력할 때 printf를 사용한 경험이 있을 것이다. printf를 사용하기 위해 #include 라는 헤더 파일을 선언해야 했다. 이때, 헤더 파일에는 함수가 있다는 정보만 선언되어 있고 실제 코드는 "라이브러리 파일"에 있다. 즉, 헤더 파일과 라이브러리 파일 둘 다 있어야 printf 함수를 실행할 수 있다는 것이다. 자세하게 보자면, 헤더 파일[ stdio.h ] 에는 라이브러리 함수의 선언만 있다. [ extern printf(); ] /usr/include 혹은 /usr/include/sys 에 미리 정의된 헤더파일들이 있음 (ex) stdio.h 실제 함수의 정의(디테일한 내용)는 라이브러리 파일에 있다. ex) printf의 함수가 어떤 일을 하는지, 함수의..
Chap 3 - 2. 부분 컴파일 부분 컴파일이란? = 여러 개의 파일들을 각각 컴파일하고 링커를 통해 합쳐져서 실행 파일로 만드는데, 여러 개의 파일들을 각각 컴파일하는 것을 부분 컴파일이라고 한다. - 부분 컴파일을 하게 되면 symbol table이 만들어지게 된다. 심볼 테이블은 각각의 변수들은 어떤 것을 사용하는지에 대해 정리되어 있다. 그것들을 이용해서 컴파일을 한 오브젝트 파일들 몇개를 서로 링크하여 하나의 실행 파일로 만드는 것이다. -변수나 함수는 거의 비슷한 개념이다. ⇒ symbol이라고 함 (변수나 함수 등의 이름을 말한다.) int a = 1; // 변수 선언 void func(int a) // 함수 선언 { a++; } -변수 선언을 할 때는 변수에 해당되는 메모리의 주소를 가리키고 있는 것이 'a' 라고 할 수..
Chap 3. 고급 언어의 기계어 변환 및 실행 고급 언어에서 기계어로 변환되는 과정을 설명 고급언어 -> 기계어로 변환되는 과정 “고급 언어 프로그램(source file)” → [컴파일러] → “어셈블리 프로그램” → [어셈블러] → “기계어 프로그램(object file)” or “기계어 프로그램(object file 또는 library file)” → [링커(linker)] → “기계어 프로그램(executable file)” or “공유 라이브러리” → [로더(loader)] ⇒ “메모리” 먼저, 각 변환기에 대해서 살펴보자. [ 컴파일러 ] 고급 언어 프로그램을 어셈블리 프로그램으로 바꾸는 것이다. 여기서 고급 언어 프로그램으로 작성한 것은 시스템 종류에 무관하다. ex) 씨언어로 작성된 파일인 a.c라는 소스파일을 각 시스템들이 가지고 있..
Chap 1. System Software와 ISA System Software와 ISA System Software = Instruction Set Architecture(ISA)에 의존적인 소프트웨어 machine에 의존적인 성격 ↔ 대칭 개념 = “어플리케이션” cpu와 상관없이 사용자가 필요로 하는 일을 처리 운영체제(OS) = 컴퓨터 시스템의 자원 (HW와 SW)를 관리 [ ex ] MS windows, Linux 넓은 의미의 시스템 소프트웨어 운영체제 제작자는 그 운영체제가 사용될 ISA를 알고 있어야 한다. os 시스템 개발자라고 하더라도 ISA를 모두 알 필요는 없다. → 요즘은 씨언어를 통해 프로그래밍한다. 컴파일러 / 어셈블러 = 고급 언어로 작성한 프로그램을 ISA에 맞게 기계어로 변환 [ ex ] 씨언어로 작성 → 컴파일러를 통해 o..