CS기초/OS,HW
-
컴퓨터에서의 뺄셈 구현 - 보수(complement)를 활용한 감산의 가산 처리CS기초/OS,HW 2023. 3. 29. 20:09
컴퓨터에서 곱셈은 덧셈, 뺄셈과 나눗셈은 보수의 덧셈을 활용하여 동작한다. 따라서 컴퓨터는 사칙연산 중 덧셈밖에 하지 못한다. 일단, 곱셈의 경우 덧셈으로 간단하게 구현이 가능한데, 해당 연산을 위한 회로를 따로 설계하는 것은 비효율적이기 때문이다. 나눗셈 역시 피제수(나누어지는 수)에서 제수(나누는 수)를 제수보다 적어질 때까지 계속 뺀 후 뺄셈의 횟수를 세면 되기 때문에 뺄셈을 구현하면 따로 회로를 설계할 필요가 없다. (예 - 7/2 → 2보다 작아질 때까지 7에서 2를 빼서 뺀 횟수를 구함 → 3, 나머지 1) 그렇다면 뺄셈은 왜 보수의 덧셈으로 구현할까? 뺄셈은 정확히 말하면 양수와 음수, 또는 음수끼리의 덧셈이다. 덧셈은 교환법칙이 성립하지만 뺄셈은 성립하지 않으므로, 앞 뒷 값의 절대값 크기..
-
도커를 공부하다보면 마주치게 되는 가상화란, 가상화의 종류CS기초/OS,HW 2022. 12. 18. 22:34
가상화는 이해하기 어렵다. 그 이유는 추상적이고 눈에 보이지 않는 개념이기 때문이다. 수학을 잘하는 사람이 물리를 못하는 이유와 같다 (=나). 4차원, 5차원 공간이 나오고 중력에 대해 이야기 하는데, 나는 그것을 본적이 없어서 그저 머리로 상상해서 그려야하기 때문이다. 그래서 자료를 많이 보고, 실제로 사용해보는 수 밖에 없다. 그러니 처음 공부하는 사람들이 가상화 자료를 몇 번 읽어 봤다 해서 이해가 안 되는 것은 당연하니, 이 글이 위안이 되었으면 좋겠다 (사실 나도 아직 잘 모르겠다). 가상화는 말 그대로 하나의 물리 리소스를 여러 개인 것 처럼 나누는 것이다. 맥에서 도커를 띄우려면 Docker Desktop이라는 것을 설치해야하는데, Docker desktop 환경 설정에 보면 하드웨어 리소..
-
운영체제 7: 코드를 통한 프로세스 작동 방식의 이해CS기초/OS,HW 2022. 5. 30. 23:59
다음 C코드를 통해 코드를 실행하면 프로세스가 어떻게 동작하는지 이해해보자. //모듈 임포트 #include #include #include #include //main함수 시작 int main() { int fd: fd = open("data.txt".O_RDONLY): //Read only로 data.txt파일을 연 호출값을 fd라는 변수에 담음 if(fd == -1) //파일이 정상적으로 열리지 않았다면 { printf("Error: can not open file\n"); //다음 문장을 출력하고 함수 종료 return 1; } else { printf("File opened and now close_\n"); //다음 문장을 출력하고 파일을 닫은 뒤 함수 종료 close(fd); return (..
-
운영체제 6: 프로세스 간 커뮤니케이션 - 가상 메모리와 IPC에 대해CS기초/OS,HW 2021. 12. 30. 02:12
프로세스는 프로그램이 실행된 상태인데, 앞서 설명했던 대로 한 프로그램은 여러 프로세스로 나누어질 수 있다. 그리고 기본적으로 각 프로세스는 독립적인 코드와 데이터 공간을 사용하며 다른 프로세스가 데이터 및 코드를 변경할 수 있는 가능성을 제한하기 위해 서로 직접적으로 통신(코드 및 데이터 영역에 접근)할 수 없다. 하지만 여러 CPU 코어를 사용하여 한 가지 작업을 하기 위해 프로세스를 나눌 때 등의 경우 프로세스 간 커뮤니케이션이 필요하다. 이를 도와주는 것이 IPC(InterProcess Communication)기술이다. (하나의 작업을 수행하기 위해 여러 프로세스를 사용하는 경우의 대표적인 예로 리눅스의 fork() 시스템 콜을 들 수 있다. fork() 함수는 프로세스를 복사해서 새로운 프로세..
-
운영체제 5: 컨텍스트 스위칭 (Context Switching)CS기초/OS,HW 2021. 12. 28. 01:21
컨텍스트 스위칭이란 여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것. 즉, CPU에 실행할 프로세스를 교체하는 기술이다. PCB 컨텍스트 스위칭은 PCB(Process Context/Control Block)이라고 하는 메모리의 별도 공간에 process 상태값들을 저장하고, 해당 값들을 찾는 방법으로 구현된다. PCB는 프로세스가 실행중인 상태를 스냅샷 찍어 저장하는 공간이라고 생각하면 된다. PCB에 저장되는 내용은 다음과 같다. Process ID (PID) 레지스터 값 (PC, SP 등) Scheduling info (프로세스 상태) Meomory info (메모리 사이즈 linit) - 전체 프로세스 사이즈 등 기타 리눅스의 PCB는 C 구조..
-
운영체제 4: 프로세스 (Process)의 구조CS기초/OS,HW 2021. 12. 28. 00:31
프로세스의 구조 text: 컴파일 된 코드 저장 data: 전역 변수 또는 초기화된 데이터 저장 bss: 초기값이 없는 변수 저장 stack: 함수 호출로 생성된 데이터, 로컬 변수 등 임시 데이터 저장 heap: 코드에서 동적으로 만들어지는 데이터 저장 Stack & Heap stack과 heap은 자료구조이다. Heap은 동적으로 메모리를 할당하는데, 사실 파이썬은 알아서 메모리를 관리하기 때문에 파이썬 이용자들에게는 어떤 의미인지 잘 안 와닿을 수 있다. C언어의 경우 사용자가 메모리를 직접 관리하는데, C에서 사용하는 malloc, free 함수가 동적 메모리 할당 및 해제에 관련된 함수다. 예를들어, C에서 다음과 같은 코드를 사용했을 때 int main() { int *data; data = ..
-
운영체제 3: 인터럽트 (Interrupt)CS기초/OS,HW 2021. 12. 28. 00:25
인터럽트란? CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황 처리가 필요할 경우에 CPU에 알려서 처리하는 기술. 쉽게 말해서 CPU가 다른 장치와 커뮤니케이션을 할 수 있도록 하는 기술이다. 예를 들어 파일을 읽는 작업을 위해 blocking 상태로 빠진 프로세스가 있었다면, 파일을 다 읽었다는 메세지를 CPU에 전달함으로써 해당 프로세가 ready 상태로 전환되었음을 알리는 것이다. 또는 선점형 스케줄러에서 프로세스를 running상태에서 ready상태로 바꾸기 위해서도 이 기술이 이용된다. CPU가 프로그램을 실행하는 도중 입출력 하드웨어 등 CPU외의 장치에서 예외(e.g. 0으로 3을 나눠라), 이슈 발생 또는 파일 처리가 끝남 → 해당 장치에서 운영체제에 이슈를 알..
-
운영체제 2: 프로세스 스케줄링 시스템의 종류와 알고리즘CS기초/OS,HW 2021. 12. 28. 00:20
스케줄링 시스템 운영체제는 CPU를 효율적으로 사용하기 위해 프로세스 스케줄링을 수행하며, 스케줄링 시스템은 여러가지가 있는데 배치(batch) 처리 시스템, 시분할 시스템, 멀티 태스킹, 멀티 프로세싱, 멀티 프로그래밍으로 나눌 수 있다. 사실 실제로는 시분할 시스템, 멀티 프로그래밍, 멀티 태스킹은 유사한 의미로 통용된다. 중요한 점은 이 세 가지 시스템 모두 CPU 활용도를 높여서 여러 프로그램이 짧은 시간안에 처리될 수 있도록 하기 위해 사용한다는 것이다. 배치 처리 시스템 자료 구조 중 큐(Queue)와 같은 방법으로(선입선출 = FIFO) 첫 번째 응용 프로그램의 작업이 끝나면 바로 이어서 다음 응용 프로그램이 자동으로 실행 될 수 있도록 하는 방법이다. 배치 처리 시스템은 여러 한계가 있고,..