본문 바로가기

전체 글86

운영체제 7 || thread (2 현대의 컴퓨터들은 코어의 개수가 올라강메 따라서 멀티스레딩을 좀 쉽게 할 수 있는 여러 방법이 고안됨 1. Implicit Threading 스레드를 만들고 관리하는걸 개발자가 직접 하는게 아닌 컴파일러와 런타임 라이브러리를 통해 OS의 도움을 받아서 관리하는것. 즉 개발자는 멀티스레딩을 고려하지 않아도 백그라운드에서 멀티 스레딩으로 변환됨 1-1. Thread Pools > 개발자가 스레드를 직접 만들긴 함, 하지만 라이브러리나 OS가 공간을 할당받고, 미리 정해진 개수의 스레드를 만듦 이러한 공간을 스레드 풀이라고 함. > 스레드 풀에서 만들어진 스레드들은 Sleep상태로 대기함 1-2. Fork Join > 멀티 스레딩은 결국 연산속도를 빠르게 하기 위함. > 분할 정복과 비슷한 매커니즘 > 메인 .. 2021. 4. 17.
운영체제 6 || 스레드(threads) 멀티프로세서 구조는 기본적으로 cost가 높음 -개발이 어렵다. -속도에 있어서 오버헤드가 있다. 위와 같은 문제들을 스레드가 해결해 줌 1. What is Thread? - 스레드는 CPU이용의 기본 단위 - 스레드는 프로그램에서 일련의 명령들을 실행함. 이 스레드는 두 가지 형태로 나뉘는데 a. 싱글 스레드 프로세스 - 스레드가 단일이라서 thread state가 하나만 존재함. - 이 싱글 스레드가 하나에 코어에만 매핑이 됨 b. 멀티 스레드 프로세스 - 스레드 여러개가 별도의 실행 흐름을 가짐 1-1. 스레드끼리 공유하는 것 - Code - Global variable - Opened files - Heap 1-2. 스레드 각자 가지고 있는 것 - Set of registers (Program C.. 2021. 4. 17.
운영체제 || 5. Inter Process Communication 시스템 안에 있는 프로세스는, 각자 독립적이거나 상호 협력적일 수 있어. 독립적인 프로세스는 당연히, 다른 프로세스에 영향을 줄 수 없지만, 협력적인 프로세스들은 영향을 줄 수 있지, 예를 들자면 이제 공유하는 데이터 같은게 있을테니까. 이 프로세스들이 독립적인 것 보다, 상호 협력적인게 장점이 많아. 첫번째, Information sharing : 데이터를 상호교환하기 떄문에 서비스의 품질이 올라가고 두번째, Computation speedup : 연산 속도가 당연히 올라갈 거고 세번째, Modularity : 프로세스에게 각각의 역할을 정해준다면, 프로세스는 각자가 필요한 코드만 들고 있을거고, 결국 유지보수에 장점이 있지. 마지막으로 Convenience : 한 Task를 한 프로세스로 할 떄 보다.. 2021. 3. 29.
운영체제 || 4. Process 오늘은 프로세스에 관해서 포스팅 할거야. 윈도우 쓰는 사람 중에 ctrl + alt + del 안눌러본 사람 있을까? 프로그램이 말을 안들어서 강제 종료할때 자주 쓰지 여기 보면 프로세스라는 탭이 있어. 그리고 목록들을 보면, 내가 실행해놓은 그리고, 이미 실행되어있는 프로그램들의 목록이 보여. 자, 대충 감이 오지? 프로세스는 이미 실행중인 프로그램을 말해. 프로그램은 디스크상에 저장되어있는 단순한 파일이야. 또 다른말로, 프로세스는 현재 실행중인 프로그램의 인스턴스라고 볼 수 있어 우리가 OOP를 할 때 보면, 한 클래스에 여러 오브젝트를 만들 수 있지? 여기서도 마찬가지로, 한 프로그램에 여러 프로세스가 있을 수 있어. 그리고 오브젝트들은 각각 고유한 이름(변수명)을 가지듯이, 프로세스도 고유한 이.. 2021. 3. 19.
운영체제 3 || OS의 구조를 어떻게 디자인 할 수 있을까? 오늘은 OS의 발전과정에 대해 배워볼거야. 먼저 결론부터 얘기하자면, OS를 설계하는데 있어서 절대적인 진리는 없어. 다만 성공적인 접근 방법이 존재할 뿐이야. 자, OS를 디자인하기 위해서는 제일 처음, 사용자의 입장과 시스템의 입장에서 목적과 특징을 정해야해. 당연히 사용자의 입장에서는 사용하기 편하고, 배우기 쉽고, 신뢰성있고, 안전하고 빠르게 작동하는게 좋을거야 시스템의 입장에서는, 설계하기 간편해야하고, 유지 보수하기도 편해야하고, 유연성이있어야하고, 에러에 있어서 좀 자유로워야 해. 이런 각각의 목적들을 가지고 설계를 하는거지 그러니까, OS를 설계 할 때, 중요한 포인트는 뭐냐면, Policy와 Mechanism을 잘 나누는 거야 Policy는 OS가 무엇을 할 건지에 관한거야 Mechani.. 2021. 3. 14.
운영체제 || 2. When computer is starting ... 저번 포스팅에는 우리 운영체제가 어떻게 시스템을 보호하는지에 대해 배웠어. 복습을 간략하게 해 보자면, CPU를 User mode // Kernel mode로 나누고, 특권 명령( privileged instruction)같은 시스템에 위협을 줄 수 있는 명령들은 오로지 Kernel mode 에서만 실행 되고, user app이 이 명령들에 접근하려 하면, 시스템 콜의 형태로 Exception이 발생되면서 OS가 cpu의 제어권을 받은 후, 명령을 처리하고, 다시 user app에게 cpu의 제어권을 넘겨주는 형식으로 시스템을 보호해. 즉, 시스템 콜은, OS가 제공하는 서비스를 사용하기 위한 인터페이스라고 정의 할 수 있어. 오늘은 컴퓨터의 전원이 켜 질때 어떠한 일이 일어나는 지 알아볼거야. 먼저, .. 2021. 3. 14.
운영체제 || 1. System Call 오늘은 어떻게 OS가 시스템을 보호하는지에 대해서 다룰것이다. 운영체제는 먼저, Hardware와 Software의 중간단계에서 user에게 편리한 인터페이스를 제공하고, 또 여러 app들이 하드웨어의 자원을 효율적으로 사용할 수 있도록 관리해준다. 그렇다면, OS를 거치지 않고 app들이 하드웨어에 직접 접근할 수 있으면 어떻게 될까? 당연히, 보안문제가 생길 수 있고, 특정 application이 하드웨어의 자원을 독점하게 될 수도 있다. 우리 컴퓨터는 인터럽트 기반으로 작동하는데, CPU안에 있는 특정 레지스터는 OS가 가지고 있는 인터럽트 핸들러의 코드 주소를 가리키고 있다. 근데 나쁜 application이 인터럽트 핸들러의 주소를 자기가 가진 코드의 주소로 바꾸게 되면 사용자가 Input 신호.. 2021. 3. 11.
파이썬/ 문자열 특정한 자리수로 나누기, python 오늘은 파이썬에서 문자열을 입력 받았을때, 문자열을 2자리면 2자리, 3자리면 3자리로 끊어서 반환받을 수 있는 방법을 알아보자. 파이썬에서는 간단하게 한 문장이면 표현이 가능한데, string = "123456789" result = [string[i:i+2] for i in range(0, len(string), 2)] print(result) 위처럼 표현한다. 이 코드는, string을 2자리 씩 나눠서 리스트로 반환해 달라는 요청인데, 2자리씩 끊으면 마지막에 9는 한자리만 혼자 남게 된다. 이는 그냥 한자리로 반환이 된다. 물론, 3자리씩 끊어서 반환받고 싶으면, 보이는 코드에서 2를 3으로 바꾸면 가능하다. string = "123456789" result = [string[i:i+3] for.. 2020. 12. 13.
[백준 알고리즘/python] 백준 1931번 회의실배정, 파이썬 설명 백준 알고리즘의 그리디 파트, 1931번 회의실배정 문제를 파이썬코드와 함께 내가 이해한대로 설명해보려 한다. 문제 출처 https://www.acmicpc.net/problem/1931 1931번: 회의실배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 먼저 그리디라는 알고리즘은 그냥 당장 단순하게 좋은것만 생각하는 알고리즘이다. 따라서 이후의 상황은 그냥 고려하지 않는 알고리즘이다. 문제를 잘 읽어 보고, 그리디를 써야겠다는 생각이 들 때 까지 익숙해져야 한다. 문제 해석 #1. N개의 회의에 대해 회의실 사용표를 만들려고 한다. 각 회의에 대해 시작시간과 끝나는 시간이 주어져 있고 각회의가 겹치지 않게 회의실 사용 표를 만들어라 #2. 단 .. 2020. 9. 27.
[백준 알고리즘/python] 백준 11047번 동전 0, 파이썬 설명 백준 알고리즘의 그리디 파터 11047번 동전 0 문제를 파이썬으로 풀고, 내가 생각했던 점을 글로 남겨 보려고 한다. 문제 출처 https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 먼저 그리디 알고리즘은 단순하게, 뒷 일은 생각하지 않고 지금 당장 좋은 것만 선택하는 알고리즘이다. 이 동전 0 문제의 경우, 특이한 조건이 하나 있어서 그리디 알고리즘을 적용 할 수 있다. 바로, 입력.. 2020. 9. 27.