본문 바로가기

전체 글168

[운영체제] 병행성 2 (Concurrency) 모든 코드를 병렬로 동작시킬 수는 없다. 싱글턴, 연결 리스트, 경쟁 자원 등을 사용하는 코드라면 예상치 못 한 결과가 발생할 수 있다. 이 경우엔 atomic 을 보장해야 한다. 그 중에서 mutex(mutual exclution) 를 위한 lock 을 구현하는 방법에 대해 살펴본다. lock 과 unlock 사이에는 atomic 을 보장해야 한다. critical section 에 들어간 스레드를 이 lock 의 owner 라고 부른다. lock 의 owner 가 존재할 때 다른 스레드는 들어갈 수 없다. 가장 간단한 접근 방법으로 lock 이라는 자료구조에 flag 라는 필드가 있다고 가정해 보자. flag 가 0이면 lock 의 소유자가 없는 것이고, flag 가 1이면 누군가가 lock 을 갖고.. 2021. 5. 31.
[안드로이드 #6] Fragment, ViewPager2 Fragment ViewPager2 중요과제 2 - Fragment Fragment 는 Activity 보다 살짝 작은 단위로 생각하면 됩니다. Fragment 를 사용하기 위해서는 반드시 Activitiy 에서 Fragment 를 추가해야 하고, 한 Activity 안에 여러 개의 Fragment 를 갖고 있을 수도 있습니다. 또한 여러 Activity 에서 같은 Fragment 를 사용할 수도 있습니다. 카카오톡처럼 Activity 하단에 메뉴 탭이 존재하고 어떤 탭을 누르냐에 따라 보이는 컨텐츠를 다르게 하려면, 이 컨텐츠들을 Fragment 로 구성할 수 있습니다. Fragment 도 Activity 와 비슷한 생명주기를 갖습니다. 기본적으로 Activity 의 생명주기를 갖고 있고, Fragme.. 2021. 5. 27.
[안드로이드 #5] menu, drawer, toolbar menu drawer toolbar 이번 스터디를 위해 새로운 모듈을 만들어서 사용하겠습니다. RecyclerView 때와 동일하게 만들면 됩니다. menu, drawer, toolbar 가 공통점이 있어 한 번에 이야기 하려 합니다. 이 부분은 많이 안 써보기도 했고 특히 toolbar 는 내용이 많아서 제가 싫어합니다. 그나마 가장 좋아하는 건 drawer 입니다. - menu 메뉴를 만드는 방법은 메뉴를 위한 xml 을 만들고 배치하고 이벤트를 연결해 주면 됩니다. 먼저 메뉴 xml 부터 만들어 보겠습니다. 메뉴 xml 파일들을 담기 위한 폴더를 만들어 줍니다. res 폴더에서 우클릭으로 만들 수 있습니다. Resource type 에 보시면 menu 라는 옵션이 이미 있습니다. 이것을 선택해 줍니.. 2021. 5. 23.
[안드로이드 #4] Retrofit2 permission, dependency 설정 api key 와 .gitignore Rectofit (Service Creator) Entity Service interface Service 사용 중요 과제 이번 시간에는 서버와 통신을 하기 위해 Retrofit2 라는 라이브러리를 이용합니다. 서버와 HTTP 통신하기 위해 사용되는 대표적인 라이브러리는 Volley 와 Retrofit2 이 있습니다. Volley 가 진입장벽은 낮지만 Retrofit2 가 성능이 더 좋고 확장성에도 좋기 때문에 대부분 Retrofit2 을 이용합니다. 보통 JSON을 가장 많이 이용하기 때문에 JSON 포맷을 사용하도록 하겠습니다. 옛날 API 나 공공데이터 API 의 경우 XML 을 사용하는 경우도 많이 있습니다. JS.. 2021. 5. 18.
[운영체제] 가상 메모리 : two-level paging 가상 메모리 정리하는데, 가장 중요한 부분을 빼먹었다. 진짜로 가장 중요한 건 아니고 내가 발표해야할 부분이어서 가장 중요하다. 발표 내용 : IA-32 two-level paging paging 기법을 이용하면 두 가지 문제점이 발생한다. 1. 속도 2. 메모리 낭비 속도 문제는 TLB 를 사용해 해결했었다. 32 비트 주소와 4kb 의 페이지 크기를 사용하면 페이지 테이블 하나의 크기는 4mb 가 된다. (2^20 * sizeof(PTE, 4byte) = 4mb) 사용하지 않는 페이지의 수가 많을 경우 그만큼 메모리 낭비가 된다. 간단한 해결 방법으로 page size 를 늘릴 경우 내부 단편화 문제가 생기고, inverted page table(VPN -> PFN 매핑이 아니라 PFN -> VPN .. 2021. 5. 16.
[운영체제] 병행성 (concurrency) 병행성 무어의 법칙 : 반도체 집적회로의 성능이 18개월마다 2배로 증가한다는 법칙이다. 근데 본인은 18개월이라고 말한 적 없고 24개월이라고 말했다고 한다. 2010 년 즈음부터 CPU 의 계산 속도는 둔화되기 시작했다. 이유는 열역학의 물리적인 한계 때문이다. 5nm 공정까지 가면 원자의 전자가 다른 곳으로 워프하는 문제가 발생한다. 하지만 삼성에서 5nm 공정에 성공했다. 삼성은 외계인을 가두고 있는 것이 이로써 확실해졌다. 하지만 생산 비용은 매우 높아졌다. CPU 속도의 한계 때문에 멀티 프로세서가 도입되었다. 여러 코어를 돌려 성능을 높인다. 그래서 병렬성을 증가시키는 게 중요하다. 병행성(concurrentcy) : 동시에 동작하는 것처럼 동작. 코어가 하나여도 된다. 병렬성(paralle.. 2021. 5. 16.
내가 보려고 정리한 git 명령어 git 공부하면서 느낀 점 : 그동안 이거 모르고 어떻게 개발했는지 모르겠다. CLI(Command Line Interface) 로는 모든 git 기능을 사용할 수 있고, github 나 IDE 에서 제공하는 기능에는 한계가 있다. 그리고 GUI 기능도 CLI 를 사용할 줄 알아야 더 잘 사용할 수 있다. 초기 설정 : 깃 저장소를 만들거나(init) 가져온다.(clone) 초기에는 commit 시 기록될 기여자(contributor)의 정보도 입력한다. git config --global user.name= git config --global user.email= git init git clone \[dir name\] git config --global alias. # 단축 명령어 git config.. 2021. 5. 8.
[운영체제] 스와핑 (swapping) 스와핑 메모리를 모두 사용했을 때 새로운 프로세스를 실행할 수 있을까? 스와핑을 이용하면 실행할 수 있다. 스와핑은 메모리에 있는 데이터를 디스크에 있는 데이터와 바꾸는 작업이다. 스왑 스페이스 : 하드디스크를 이용하는 것 얘기 초반에 피지컬 메모리만 있을 때 문제점 : 메모리 크기가 충분하지 않으면 모든 프로그램을 적재할 수 없다. 아이디어 페이징 시스템을 사용하고 있을 때 사용하지 않는 프레임이 있다면 그 부분을 디스크에 저장하고 디스크에 있는 페이지를 메모리로 올린다. 프로세스가 메모리 접근 -> (if 메모리에 없다) 스와핑이 일어난다. -> 디스크에서 가져온다. -> 메모리에 다시 엑세스 운영체제에서 어떤 페이지를 가져오라는 명령을 줄 수 있어야 한다. 스와핑은 cpu가 자동으로 할 순 없고 운.. 2021. 5. 4.
[운영체제] 가상 메모리 2 (paging) 페이징을 시작하기 앞서, 프로젝트2 하기 전에 정리한 내용(Segmentation)들... 일단 교수님이 IA-32 인텔 아키텍쳐 매뉴얼을 보면 도움이 된다고 하셨는데,... pdos.csail.mit.edu/6.828/2005/readings/ia32/IA32-3.pdf 그 내용이 여기에 있다. 영어로 800페이지 있는 거 보고 깔끔하게 무시했다. 프로젝트2 요구사항은 geekOS 에서 segmentation 을 이용하여 userseg.c 파일을 완성하는 것이다. userseg.c 의 Create_User_Context(), Load_User_Program() 함수를 완성하면 되었다. C언어가 이렇게까지 어려워질 수 있구나라는 걸 프로젝트2 하면서 느꼈다. LDT : Local Descriptor Ta.. 2021. 5. 2.