본문 바로가기

전체 글409

쓰레드(thread) 앞서 프로세스에서 각 프로세스는 각자의 PC, 레지스터, 주소 공간 이외의 많은 것들을 가진다고 했었다. 또한 각 프로세스는 서로 독립적이기에 상관 관계가 없을 때는 useful하다는 사실을 알고 있다. 즉, 경우에 따라서 복사본 자원의 낭비가 생길 수 있게 된다. 이러한 문제점을 해결하기 위해 쓰레드(thread)를 사용한다. 쓰레드는 lightweight 프로세스이며 context는 PC, 레지스터 집합, 스택으로 구성된다. 다시 말해 프로세스를 생성하던 fork는 부모와 자식 프로세스를 똑같이 실행한 반면 프로그램의 서브루틴을 독립적으로 실행되게 해주는 것을 쓰레드라고 한다. 쓰레드로 생성할 함수의 원형은 다음과 같다. 1void *function_name(void *parameters); 쓰레드를.. 2020. 8. 5.
프로세스 생성 OS가 프로세스를 생성할 때 생성하는 행위(서브루틴) 자체의 명칭이 있다.리눅스/유닉스에서는 fork()함수를, 윈도우에서는 CreateProcess()함수를 사용한다.fork()함수에 대해 알아보도록 하겠다. 다음은 함수 원형이다. 1 2 3#include #include pid_t fork(void);리턴 값은 새로 만들어진 프로세스의 PID이며, pid_t는 int라고 생각해도 된다.자식 프로세스의 PC값조차도 부모 프로세스의 PC값과 똑같다. 간단한 예시들을 통해 fork의 작동 원리를 확인해보자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15#include #include int X = 0; main(){ int x = 0; pid_t pid = 0; x = 10; pid = .. 2020. 7. 12.
프로세스 여태까지 프로세스라는 단어를 자주 써왔는데 이에 대해서 조금 더 구체적으로 알아보도록 한다. 우선 사전식으로 정의해보자면 실행중인 프로그램. 다시 말해 CPU가 하는 모든 일은 어떤 코드를 실행하고 있는데 이런 걸 프로세스라고 한다. (같은 말로 jobs, tasks라고도 한다.) 같은 프로그램에 대해서 여러 프로세스들이 관계되어있을 수 있다. 즉, 자식 프로세스를 생성할 수 있으며 부모와 자식 프로세스는 pid가 다르다.예를 들어 한글 창을 2개 열면 한글 프로그램은 같지만 data 부분은 다른 2개의 프로세스를 갖는다. 프로세스의 구조는 다음 그림과 같다.header : 파일 이름, 파일 사이즈, 만들어진 날짜 등등 파일 자체의 정보를 나타낸다. text : code와 instruction을 뜻한다... 2020. 7. 11.
시스템 콜 앞서 OS의 목적 2가지를 user convenience(유저 편의성)와 system efficiency(시스템 효율성)이라 했다.유저 편의성을 위해 GUI나 파일 관리 뭐 이런 것들이 있고, 시스템 효율성을 위해 자원 배치나, protection 등이 있다. 시스템 콜 역시 유저 편의성을 위함이다.유저가 커널의 자원들 그러니까 하드웨어들을 사용할 때 보다 편하게 도와주는 역할을 한다. 단순히 도와주는 역할에서 끝나는 것이 아니라 유저가 하드웨어를 직접 사용하는 것을 방지해주기도 한다. 즉, 시스템 콜은 유저와 커널 사이의 OS 안에 있다. (사실 커널도 OS 안에 있긴 하다.) 또 앞서 printf와 wirte의 차이점을 살짝 보고 넘어갔는데 정확히 짚고 넘어가자면 printf는 라이브러리 함수이고, .. 2020. 7. 7.
OS Structure, Hardware Protection 멀티 프로그래밍과 멀티 태스킹에 대해 들어본 적이 있을 것이다. 이번엔 이 2가지 방식에 대해 알아보도록 한다. 우선 몇가지 사실에 대해 알고 넘어가야한다.1. 실행 가능한 프로그램은 메모리에 올라와있다.2. 프로세스는 여러 큐들에 의해 관리된다. (Ready, Sleep)3. (CPU는 single core라 가정했기에) 한 번에 하나의 프로세스만 작동(Run)한다. 멀티 프로그래밍의 작동 과정은 다음 그림과 같다.(노란색 원은 큐를 뜻한다.) Ready 상태의 프로세스를 CPU가 한가할 때 CPU가 실행(dispatch)해서 Run 상태로 만든다.Run 하고 있다가 IO 명령이 발생하면 Sleep 상태가 된다.다시 Ready 상태의 프로세스를 하나 골라서 dispatch한다.Sleep 상태에서 IO .. 2020. 7. 7.
메모리 저장 공간의 구조 그러니까 다시 말해서 메모리에 관해 조금 더 자세히 알아보도록 하겠다. 이 부분은 뭐.. 솔직히 필요한가 싶긴 하다만 그래도 나름 열심히 수업을 들었으니 아까워서라도 올린다.. 일반적으로 우리가 여태까지 알고 있던 바로는 CPU가 직접 접근할 수 있는 유일한 메모리는 메인 메모리이다. 조금 더 정확하게 말하자면 CPU가 직접 접근할 수 있는 유일한 메모리는 캐시 메모리이고, 메모리는 cache controller에 접근하는 것이지만 캐시는 논외로 하니까 저렇게 말하겠다. 즉, 메인 메모리와 CPU 사이에는 명령어와 데이터가 왔다갔다 한다. 앞서 컴퓨터 시스템의 구성 요소에서 메모리 계층 구조와 load, store에 대해 설명한 바 있는데 그 얘기다. 당연한 사실이지만 명령어는 read.. 2020. 7. 6.