목록CS 지식 (21)
하다보니
부모 프로세스의 문맥을 모두 복사해서 자식 프로세스를 만든다. code data stack, cpu 문맥, program counter 모두 복사한다. 프로세스가 만들어지고 난 후에는 독립적인 프로세스이기 때문에 부모와 경쟁한다. 자식이 부모의 주소 공간을 공유한다. copy-on-write(COW) 기법. write가 발생했을 때 그때 copy 하겠다는 말이다. write라는 것은 내용이 바뀌는 것을 말한다. 그전에는 부모의 자원을 공유하고 있다가 자식 프로세스에 write가 발생해서 변화가 생기면 copy 하게 된다. 운영체제에 부모 프로세스가 자식 프로세스의 생성을 요청한다. 부모와 자식이 공존하며 수행되는 모델과 자식이 종료될 때까지 부모가 기다리는 모델이 있다. fork() 시스템 콜. int ..
프로세스 생성. 부모 프로세스(parent process)가 자식 프로세스(children process)를 생성한다. 복제 생성을 하게 된다. 부모 프로세스는 1개. 자식 프로세스는 여러 개가 될 수 있다. 프로세스의 트리(계층 구조) 형성. 프로세스는 자원을 필요로 한다. - 운영체제로부터 받는다. 부모와 자식이 자원을 공유하는 경우도 있고 아닌 경우도 있다. 공유하게 되면 경쟁하게 되어서 일반적으로는 공유하지 않는다. 부모와 자식이 공존하면서 수행되는 모델이 있고 자식이 종료될 때까지 부모가 기다리는 모델도 있다. - 주소 공간(address space) 자식은 부모의 공간을 복사한다. (binary and OS data) 자식은 그 공간에 새로운 프로그램을 올림. fork() 시스템 콜이 새로운 ..
동기식 입출력은 입출력 요청을 한 프로세스가 입출력이 끝날 때까지 아무 일도 안 하고 기다린다. 비동기식 입출력은 사용자 프로세스가 입출력 요청을 하고 입출력이 진행되는 동안에 cpu를 곧바로 잡아서 무엇인가 instruction을 수행하는 것을 말한다. 두 개의 차이는 프로세스가 입출력이 진행되는 동안에 instruction을 실행하느냐 안 하느냐의 차이이다. 스레드는 프로세스 내부에 cpu 실행 단위가 여러개 있는 경우에 그것을 말한다. 프로세스 하나에 cpu 수행 단위만 여러개 두는 것을 스레드라고 한다. 프로세스 하나에서 공유할 수 있는 것은 최대한 공유한다. program counter, register, stack은 별도로 갖는다. 스레드가 동료 스레드와 공유하는 부분(task라고 부른다. t..
프로세스는 실행 중인 프로그램을 말한다. 프로세스의 문맥(context) - cpu 수행 상태를 나타내는 하드웨어 문맥. code data stack으로 이루어진 주소 공간의 code를 program counter가 가리키고 있다. - 프로세스의 문맥 cpu 수행 상태를 나타내는 하드웨어 문맥. - program counter, 각종 register 프로세스의 주소 공간 - code, data, stack 프로세스 관련 커널 자료 구조 - 프로세스의 상태 프로세스는 상태가 변경되며 수행된다. Running - cpu를 잡고 instruction을 수행 중인 상태 Ready - CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고) Blocked(wait,sleep) - CPU를 주어도 당장 ins..
컴퓨터를 호스트라고 한다. cpu는 메모리에 올라와 있는 기계어를 처리한다. cpu안에 메모리 주소를 가리키는 레지스터가 있다.(program counter이다.) cpu는 메모리에 있는 instruction을 순차적으로 수행한다. cpu는 아주 빠른 일꾼이다. interrupt 들어온 것이 있는지 check 해서 하던 작업을 멈추고 누가 쓰고 있었던 상관없이 cpu 제어권이 운영체제한테 넘어간다. 해당 interrupt에 맞게 처리해야 할 일들이 운영체제 커널에 함수로 정의가 되어 있다. 인터럽트 벡터는 인터럽트 번호와 주소의 쌍을 가진다. cpu는 매번 program counter가 가리키는 곳을 실행하게 된다. 운영체제가 cpu를 가지고 있을 때는 mode bit이 0이다. io디바이스에 접근하는 ..
해시란 단방향 암호화 기법으로 해시함수(해시 알고리즘)을 이용하여 고정된 길이의 암호화된 문자열로 바꿔버리는 것을 의미한다. 해시 함수(짧게는 해시)는 임의의 길이를 갖는 임의의 데이터를 고정된 길이의 데이터로 매핑하는 함수를 말한다. 쉽게 말해 아무리 큰 숫자를 넣어도 정해진 크기의 숫자가 나오는 함수이다. 이때 매핑 전 원래 데이터의 값을 키(key), 매핑 후 데이터의 값을 해시값(hash value), 매핑하는 과정을 해싱(hashing)이라고 한다. 이러한 해시 함수들을 적용하여 나온 고정된 길이의 값을 해시값이라고 한다. 해시값 자체를 index로 사용하기 때문에 평균 시간 복잡도가 O(1)로 매우 빠르다. 해시함수는 계산이 복잡하지 않고 키값에 대해 중복없이 해시값을 고르게 만들어 내는 함수..
컴퓨터 시스템에서 하드웨어가 어떻게 동작하는지, 프로그램이 이 위에서 어떻게 돌아가는지 운영체제를 본격적으로 배우기 전에 알아보는 시간이다. 하드웨어는 cpu와 메모리로 구성된 컴퓨터와 I/O 디바이스로 구성이 되어있다. 메모리는 cpu의 작업공간이다. cpu는 매 순간 메모리에서 기계어를 읽어서 실행을 하게 된다. 하드디스크는 보조 기억 장치이지만 io device로 볼 수도 있다. device controller가 각 io device에 붙어있어서 이 장치들을 전담하는 cpu역할을 한다. cpu안에 레지스터가 있다. mode bit은 cpu에서 실행되는 것이 운영체제인지 사용자 프로그램인지 구분해준다. interrupt line은 cpu는 항상 메모리에 있는 instruction만 실행한다. cpu는..
운영체제 의미 좁은 의미의 운영체제를 커널이라고 부른다. 소프트웨어가 컴퓨터 시스템에서 수행되기 위해서는 메모리에 그 프로그램이 올라가 있어야 한다. 마찬가지로 운영체제 자체도 소프트웨어로서 전원이 켜짐과 동시에 메모리에 올라가야 한다. 하지만, 운영체제처럼 규모가 큰 프로그램이 모두 메모리에 올라간다면 한정된 메모리 공간의 낭비가 심할 것이다. 따라서 운영체제 중 항상 필요한 부분만을 전원이 켜짐과 동시에 메모리에 올려놓고 그렇지 않은 부분은 필요할 때 메모리에 올려서 사용하게 된다. 이때 운영체제의 핵심 부분으로 메모리에 상주하는 부분을 커널이라고 한다. 넓은 의미의 운영체제는커널뿐 아니라 각종 주변 시스템 유틸리티를 포함한 개념이다. 광의의 운영체제에 포함되는 것들은 메모리에 상주하지 않는 독립적인..
운영체제는 컴퓨터 하드웨어 바로 위에 설치되는 소프트웨어 계층으로서 모든 컴퓨터 시스템의 필수적인 부분이다. 본 강좌에서는 이와 같은 운영체제의 개념과 역할, 운영 체제를 구성하는 각 요소 및 그 알고리즘의 핵심적인 부분에 대해 기초부터 학습한다. 운영체제가 이제 스마트폰이나 자동차에도 들어간다. 운영체제란 무엇인가? 컴퓨터 하드웨어 바로 위에 설치되어 사용자 및 다른 모든 소프트웨어와 하드웨어를 연결하는 소프트웨어 계층. 하드웨어 위에 운영체제가 설치되면 그것이 한 몸이 되어 컴퓨터 시스템이 되고 사용자는 하드웨어에 직접 접근하지 않으면서 운영체제를 통해 쉽게 컴퓨터를 사용할 수 있게 된다. 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다. 운영체제는 동시 사용자/프로그램들이 각각 독자적 컴퓨..
인터페이스란 상호작용하는 곳이다. 우리가 쓰는 프로그램들은 프로그램 상의 어떤 인터페이스를 통해서 컴퓨터 시스템의 자원들을 사용하고 네트워크와 통신하며 우리가 쓰는 컴퓨터에 아이콘을 띄우기도 한다. 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다. API는 쉽게 프로그램간 커뮤니케이션을 담당하는 기능이다. 한 프로그램이 다른 프로그램을 이용할 때 쓰는 인터페이스로 기계가 이해하기 쉽게 입출력이 데이터로 이루어진다. 해당 프로그램의 기능을 다른 프로그램이 쓸 수 있게 하는 것이 목적. 애플리케이션을 서로 연결하여 서로 통신할 수 있다는 것이 핵심이다. 라이브러리는 소프트 웨어를 개발할 때 사..