본문 바로가기

공부/OS23

[운영체제] 운영체제 만들기 32비트 인텔 CPU를 가정한다. bios 는 다루지 않는다. 키보드, 디스크, 화면을 다룬다. general purpose registers EAX, EBX, ECX, EDX stack registers ESP, EBP EBP 는 base pointer 인데, 현대의 컴파일러들은 EBP 를 거의 사용하지 않는다. other registers EIP, EFLAGS(bit vector of flags, stroes things like carry, ...) 메모리의 값을 바로 메모리에 넣을 수는 없고 반드시 레지스터를 거쳐야 한다. 운영체제에 따라 RAX, EAX, AX 로 나눌 수 있고 이전 버전과 호환되어야 한다. AX 는 AH + AL 로 나눌 수 있다. jmp : 무조건 점프 jz : zero 면 .. 2021. 4. 19.
[운영체제] 스레드(thread) Threads thread : 실 이라는 뜻이다. 하나의 제어 흐름. control flow 웹 서버 - 클라이언트같은 경우 여러 개의 제어 흐름을 가져야 하는데, 이 경우 프로세스보다 스레드를 이용하는 것이 유리하다. 스레드는 글로벌 변수, 코드, 파일 디스크립터 등을 공유하기 때문에 만드는 데 걸리는 비용이 적고 컨텍스트 스위칭의 오버헤드도 적게 든다. 스레드는 힙 영역은 공유하고 레지스터와 스택 영역은 따로 가진다. 유저 레벨 스레드 : 라이브러리 형태로 구현되어 있다. POSIX 의 pthread 가 대표적이다. 윈도우랑 자바에서 사용한다. 유저 레벨 스레드라고 해서 커널 스레드를 갖지 않는 것이 아니라 커널 스레드와 매핑 된다. 커널 스레드 : 대부분 운영체제에서는 스레드를 지원하고 잇다. 유저.. 2021. 4. 19.
[운영체제] 컨텍스트 스위칭은 언제 일어나야 하는가? 컨텍스트 스위칭은 언제 일어나야 하는가? 다음 4 가지 경우가 있다. 프로세스가 CPU 를 양보하는 경우 프로세스가 시스템 API 를 호출하는 경우 프로세스가 I/O 를 요청하는 경우 timer interrupt 프로세스가 자발적으로 CPU 를 포기하는 경우 임베디드같이 프로세스를 적게 사용하는 경우 프로그래머가 조절해서 사용이 가능하다. 하지만 고의 혹은 실수로 하나의 프로세스가 CPU 를 계속해서 차지하는 경우가 발생할 수 있다. 시스템 API 호출을 이용하는 경우 시스템 API 호출 이후 다시 원래 프로세스로 돌아가는 것이 아니라 컨텍스트 스위칭을 시킨다. 사용자 상호작용이 많은 경우 사용이 가능하다. 문제점 : 시스템 API 를 호출하지 않는 프로그램의 경우 장기간 CPU 를 사용할 수 있다. I.. 2021. 4. 18.
[운영체제] 컨텍스트 스위칭(context switching) Context Switching context : 한국어로 "문맥"이라는 뜻이다. 프로세스를 중단했다가 다시 실행하려고 할 때 복원할 수 있는 충분한 정보 context switching : 실행중인 프로세스 교체 컨텍스트 스위칭을 하기 위해 고려해야할 세 가지가 있다. 어떻게 현재 프로세스 상태를 저장할 것인가? 어떻게 현재 프로세스를 중단할 것인가? 어떻게 이전 프로세스를 복원할 것인가? 각 프로세스는 스택을 가지고 있고, 운영체제에서는 컨텍스트 스위칭을 하기 위해 이 스택을 이용한다. 스택은 지역변수, 함수 arguments 등을 저장하는 역할을 한다. 함수가 끝났을 때 돌아갈 주소도 스택에 저장한다. x86 아키텍처에서는 스택이 밑으로 자라난다. (리틀 엔디안) EIP : Instruction P.. 2021. 4. 18.
[운영체제] 프로세스(process) 프로그램 : 디스크에 저장되어 있는 프로그램 프로세스 : 현재 실행중인 프로그램 로더 : 프로그램을 메모리에 적재하는 역할 커널 : 프로세스의 생성부터 종료까지 (PCB)관리 PCB(Process Control Block) : 프로세스의 정보를 저장하는 자료구조 상태(state) : 프로세스가 중단되었다가 다시 실행될 때, 원래 상태를 복원할 수 있는 충분한 정보 프로그램과 프로세스의 차이는, 프로그램은 디스크에 저장되어 있는 것이고, 프로세스는 프로그램을(더블 클릭 등으로) 실행했을 때 생기는 것이다. 동일한 프로그램을 두 번 실행시킬 수도 있다. 프로세스 상태 struct task_struct { pid t_pid; long state; unsigned int time_slice struct task.. 2021. 4. 18.